Как использовать YII2 Sluggable Behavior?

Я определил это поведение в соответствии с инструкциями по документации.

public function behaviors() { return [ TimestampBehavior::className(), [ 'class' => SluggableBehavior::className(), 'attribute' => 'title', ], ]; } 

В моем менеджере URL-адресов конфигурации я определил настраиваемое правило следующим образом: example.com/article/1

 'urlManager' => [ 'class' => 'yii\web\UrlManager', 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ 'article/<id:\d+>/<slug>' => 'article/view', ], ], 

Мое действие:

 public function actionView($id, $slug = null) { return $this->render('view', [ 'model' => $this->findModel($id), ]); } 

В моем файле индексного представления я создаю URL-адрес, чтобы просмотреть действие следующим образом: Url::to(['article/view', 'id' => $model->id, 'slug' => $model->slug])

Я хотел бы вывести заголовок статьи в url следующим образом: example.com/article/1/My-first-post

Но я не получаю титул в URL.

Soju сказал, что slug – это атрибут базы данных. Я создал новый столбец в моей статье table slug, и это varchar 1024. Но я все еще не получаю slug, сгенерированный в URL. Мой URL: example.com/article/1

Что не так ? благодаря

EDIT : я обновил свой код, чтобы вставить значение заголовка в столбце slug в моей таблице статей. Теперь я получаю slug, но я не получаю URL-адреса SEO. Я получаю это: article/1/First+Article , и я хотел бы article/1/First-Article .

Я пробовал:

 return [ TimestampBehavior::className(), [ 'class' => SluggableBehavior::className(), 'attribute' => 'title', 'value' => function ($event) { return str_replace(' ', '-', $this->slug); } ], ]; 

Это тоже не работает: return str_replace(' ', '-', $this->slug);

Вы можете добавить следующее правило urlManager :

 'article/<id:\d+>/<slug>' => 'article/view', 

И создайте URL-адрес в своих представлениях следующим образом:

 \yii\helpers\Url::to(['article/view', 'id'=>$model->id, 'slug'=>$model->slug]) 

Вы также можете добавить помощников в свою модель:

 public function getRoute() { return ['article/view', 'id'=>$this->id, 'slug'=>$this->slug]; } public function getUrl() { return \yii\helpers\Url::to($this->getRoute()); } 

А затем просто используйте $model->url в своих представлениях.