Encoderast
@Encoderast
frontend пытается что-то делать в backend

Yii2 -> url без id товара — как реализовать?

Всем привет!

Подскажите как реализовать вывод товара без его id в url ?

сейчас:
/price/23-akademiceskogo-otpuska.html

нужно
/price/akademiceskogo-otpuska.html

config:
'price/<id:\d+>-<slug:[a-z0-9_-]+>.html' => 'price/view',


Контроллер:
public function actionView($id){
//        $id = Yii::$app->request->get('id');

        $reviews = Review::find()->where(['status' => '1'])->limit(30)->all();
        $price = Price::findOne($id);
        if(empty($price))
            throw new \yii\web\HttpException(404, 'Такого товара нет');
//        $product = Product::find()->with('category')->where(['id' => $id])->limit(1)->one();

        $this->setMeta($price->title, $price->keywords, $price->description);
        return $this->render('view', compact('price', 'reviews'));
    }


Вьюха
<a href="<?= \yii\helpers\Url::to(['price/view', 'id' => $price->id, 'slug' => $price->slug]) ?>


Выручайте!
  • Вопрос задан
  • 280 просмотров
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
Вам нужно убрать правила в UrlManager и в контроллере
public function actionView($id){
        ...
        $product = Product::findOne($id);
        ...
}


заменить на
public function actionView($slug){
        ...
        $product = Product::findOne(['slug'=>$slug]);
        ...
}


если есть такое поле
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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