Задать вопрос
@Iossarian

Как реализовать slug в yii2?

Добрый вечер. Задача у меня следующая - заменить на yii2 проекте страшные урлы на слаги. Поставил либу, которая в бд в поле slug генерирует его из тайтла новости, осталось поставить эти слаги в сам урл. Подскажите, как правильно это реализовать?
public function actionView($slug)
    {
       $model = News::find()->where(['slug' => $slug])->one();
  
        return $this->render('view', [
            'model' => $this->findModel($slug),
        ]);
    }

'urlManager' => [

            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
                '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
            ],
        ],
  • Вопрос задан
  • 2830 просмотров
Подписаться 1 Простой 8 комментариев
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Поставил либу, которая в бд в поле slug генерирует его из тайтла новости

Для этого есть из коробки поведение, не нужны либы дополнительные:
https://www.yiiframework.com/doc/api/2.0/yii-behav...
Просто подключаете в модели и указываете что транслитерировать и куда.

Вы в экшене нашли модель, но при этом потом ищите ее еще раз, смысл?
public function actionView($slug)
    {
      $model = News::find()->where(['slug' => $slug])->one(); //вот тут вы уже нашли модель по slug
  
        return $this->render('view', [
            'model' => $this->findModel($slug), //вот тут вместо того что бы передать найденную модель, дергаете функцию findModel непонятно зачем
        ]);
    }

Как-то так должно быть
public function actionView($slug)
    {
       if($model = News::find()->where(['slug' => $slug])->one()){
           return $this->render('view', [
               'model' => $model
           ]);
       }
       throw new NotFoundHttpException('Не найдено такой новости,  может под стол закатилась, мы поищем завтра.');
    }

в урл менеджере что-то типа
'rules' => [
                '/' => 'site/index',
                '/news/<slug>/' => 'news/view',
            ],
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Комментировать
amurcoder
@amurcoder
Web Developer
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы