Помощь с контроллерами

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
domowdenis
Сообщения: 15
Зарегистрирован: 2018.12.24, 17:29

Помощь с контроллерами

Сообщение domowdenis » 2019.04.17, 21:32

Здравсвуйте.

Вопрос - у меня есть каталог товаров разных категорий.
Каждая из категорий различается и разными артрибутами, внешнтм видом и структурой страницы - т.е. я так понимаю - прийдется формировать вид для каждой отдельной категории и страницы товара этой категории.

В идеале я хочу получить такую структуру:
site.com/products - все категории

site.com/products/category1 - товары категории 1
site.com/products/category2 - товары категории 1

site.com/products/category1/product1 - товар1 категории 1
site.com/products/category1/product2 - товар2 категории 1

Как правильно раскидать это в контроллере (контроллерах):

Т.е. например запрос пришел на site.com/products/category1 - шлю на [catalog/index] (или например на [site/catalog]) а там делаю что-то типа такого?

$category_id = Category::find()->select('id')->one();
if ($category_id == 1) {
return $this->render('category1');
}
elseif ($category_id == 2){
return $this->render('category2');
}
......

В вид передаю уже нужный датаПровайдер и играюсь с страницей уже под конкретную категорию?

Ну тогда при запросе site.com/products/category1/product1 - шлю на [product/index] а там:
$category_id = Category::find()->select('id')->one();
if ($category_id == 1) {
return $this->render('product_category1');
}
elseif ($category_id == 2){
return $this->render('product_category2');
}
......

Но мне не нравится это решение - я уверен, что делаю ошибку. Есть еще какие-то варианты?

someweb
Сообщения: 518
Зарегистрирован: 2017.03.09, 10:12

Re: Помощь с контроллерами

Сообщение someweb » 2019.04.18, 10:06

В упрощенном виде через числовые id в url
В urlrules добавьте

Код: Выделить всё

    '/products/<category_id:\d+>/<product_id:\d+>' => 'poducts/index'
Экшн:

Код: Выделить всё

    ProductsController::actionIndex($category_id = null, $product_id = null) 
Выбор вью:

Код: Выделить всё

   if ($category_id === null) return $this->render('index', [...]); 
   $category_id = (int)$category_id;
   if ($product_id === null) {
       return $this->render("category_{$category_id}", [...]); 
   }
   return $this->render("product_{$category_id}", [...]);
Вьюшки в файлах category_IDкатегории.php и product_IDкатегории.php
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.

domowdenis
Сообщения: 15
Зарегистрирован: 2018.12.24, 17:29

Re: Помощь с контроллерами

Сообщение domowdenis » 2019.04.18, 10:50

Но по сути - это мой же и подход - только id в url светится будут.
Значит - более изящного решения, видимо, нет.
В любом слючае - спс за отклик

ЗЫ.За дефолтное значение не подумал - спс

Ответить