Как использовать Sluggable Behavior Yii2, не показывая номер идентификатора? - PullRequest
0 голосов
/ 25 апреля 2020

Я прочитал вопрос о с использованием SluggableBehavior в Yii2

, и в моем пробном случае я могу создать URL-адрес, например article / 1 / First-Article, используя правило в urlManager

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

и использование

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

для создания URL.

В моем реальном случае я использую ['article / view', 'ha sh' => $ model-> ha sh, 'slug' => $ model-> slug] для генерации URL. Мое правило:

'article/<hash:[\d-\w]+>/<slug>'=>'article/view'

Мой URL-адрес похож на article / 1e482d69129d760e9494b2c6e86eba2b / First-Article.

Я хочу отображать URL-адрес только как article / First-Article, т. Е. Не отображать ha sh код в URL. Есть ли способ добиться этого? Большое спасибо!

1 Ответ

0 голосов
/ 25 апреля 2020

Согласно Yii docs , если вы укажете SluggableBehavior свойство attribute с массивом атрибутов модели, оно взорвется (объединится) для генерации уникальность для слизни. В вашем случае эта реализация полностью удовлетворяет желаемому составному составу слагов (например, First-Article-1);

Внутренне SluggableBehavior выполнит свой метод generateSlug для генерации уникального слага из композиции атрибутов, определенной в attribute имущество. Поскольку generateSlug по умолчанию использует - разделитель, он идеально соответствует вашим требованиям для генерации желаемого URL-адреса.

Взгляните на это:

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

EDIT :

Это ваше правило URL: 'article/<slug>' => 'article/view'

и

Создание соответствующей ссылки: Url::to(['article', 'slug' => $model->slug . '-' . $model->id])

...