modelden bir örnek vereyim..
Öncelikle trait eklentinin sayfasında belirtiği gibi "use" modele eklenir.
örnek
use Cviebrock\EloquentSluggable\SluggableInterface;
use Cviebrock\EloquentSluggable\SluggableTrait;
class Post extends Eloquent implements SluggableInterface
{
use SluggableTrait;
protected $sluggable = array(
'build_from' => 'title', // tittle model özelliği slug için kullanılacak
'save_to' => 'slug', // veritabanındaki colon ismi, yani modelin özelliği
);
}
Ben bu trait için şu tanımlamaları yapmışım, dökümantasyondan farklı olarak
protected $sluggable = array(
'build_from' => 'name',
'save_to' => 'slug',
'on_update'=> 'true',
'separator' => '-',
'method' => array('Str','slug'),
'max_length'=> 50,
'unique' => true,
'use_cache' => false,
'include_trashed' => true,
'reserved' =>
[
'add','delete',
'settings','setting',
'category','product',
] );
Modelerimde bu traiti şu şekilde kullanmışım
/**
* To create uniqu slug
*
* @param string $value New unique slug
*/
public function CrateNewSlug($value) {
$RawSlug = $this->generateSlug($value);
$validatedSlug = $this->validateSlug($RawSlug);
$slug = $this->makeSlugUnique($validatedSlug);
$this->setSlug($slug);
}
Modeller güncellenirken ya da kayıt edilirken observer class kullanarak slug otomatik güncelleniyor.
Siz boot methodu ile events da kullanabilirsiniz. Modellerde karmaşa yarattığı için kullanmıyorum.
kullandığım bir observer classı
/**
* Description of ProCategory
*
* @author Murat Ödünç <murat.asya@gmail.com>
*/
class ProCategoryObserver {
/**
* To check slug attribute value
*
* @param object $model
* @return string
*/
protected function AttributeSlugIsEmpty($model) {
return $model->slug == '' ? true : false;
}
/**
* To set slug attribute value
*
* @param object $model
* @return boolean
*/
protected function AttributeSlugSet($model, $value) {
$model->CrateNewSlug($value);
return $model->save() === true ? : false;
}
/**
* When ProCategory model is updating,
* this method will update slug attributes
*
* @param type $model
*/
public function updated($model) {
if ($this->AttributeSlugIsEmpty($model)) {
$this->AttributeSlugSet($model, $model->name);
}
}
}
Modeller için Observer kullanımı laravel dökümanlarında var. Eloquent bölümünde ayrıntılarını bulabilirsiniz.
cviebrock/eloquent-sluggable eklentisi tam otomatik çalışmaz. Bu aslında iyi bir şey. İstediğiniz gibi özelleştirebilirsiniz. Bu traid standart slug için yardımcı metotlarla gelir. Siz 2-3 method yazarak modellerinize isteğiniz doğrultusunda unique slug değerleri oluşturuabilirsiniz.