-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathSluggableModelTrait.php
More file actions
68 lines (59 loc) · 1.43 KB
/
SluggableModelTrait.php
File metadata and controls
68 lines (59 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
namespace Esensi\Model\Traits;
use Illuminate\Support\Arr;
/**
* Trait that implements the Sluggable Model Interface.
*
*/
trait SluggableModelTrait
{
/**
* Convert the value into a slug using a regexp replacement.
*
* @param string $value
* @return string
*/
public function makeSlug($value)
{
$value = preg_replace('/[^a-zA-Z0-9\-\_]+/', '-', $value);
return str_replace(['--', '__'], ['-', '_'], trim(strtolower($value), '-_'));
}
/**
* Get the key that defines the model's sluggable attribute.
*
* @return string
*/
public function getSlugKey()
{
return $this->sluggableKey ?: 'slug';
}
/**
* Set the key that defines the model's sluggable attribute.
*
* @param string $key
* @return Illuminate\Database\Eloquent\Model
*/
public function setSlugKey($key)
{
$this->sluggableKey = $key;
return $this;
}
/**
* Get the value assigned to the sluggable key.
*
* @return string
*/
public function getSlugAttribute()
{
return Arr::get($this->attributes, $this->getSlugKey());
}
/**
* Mutate the value to a slug format and assign to the sluggable key.
*
* @param string $value
*/
public function setSlugAttribute($value)
{
Arr::set($this->attributes, $this->getSlugKey(), $this->makeSlug($value));
}
}