Вот задание: Спойлер: Задание 1. Создать в БД таблицу Товаров и добавить туда данные + 2. Создать модель в проекта на таблицу товаров + 3. Создать контроллер Product + 4. Добавить 1 экшина: listproduct - вывод списка товаров + 5. Для экшина создать представление + 6. Добавить постраничный вывод списка товара + 7. Добавить для каждой записи из п.4-6 ссылку на страницу товара 8. Добавить экшин и представление для отображение одного товара. В представлении добавить возврат к списку товаров. 9. Подключить URL-manager + Это все сделал, но не понимаю пункт 7 и 8, как быть с этими 2 пунктами, нужно для каждого товара создавать отдельную страницу или можно url? как отобразить 1 товар и как должен выглядеть переход к одному товару и к списку товаров. controllers/ProductController.php Спойлер: Код PHP: <?php namespace app\controllers; use app\models\Product; use yii\web\Controller; class ProductController extends Controller { public function actionListproduct() //постраничный вывод { $query = Product::find()-> select('id, name, category, price, quantity')-> orderBy('price ASC'); $page = new \yii\data\Pagination ( [ 'totalCount' => $query->count(), 'pageSize' => 3 ] ); $products = $query->offset($page->offset)->limit($page->limit)->all(); return $this->render('products', compact('products', 'page')); } } ?> views/Представление products.php Спойлер: Код PHP: <table class="table"> <thead class="thead-dark"> <tr> <th scope="col">Id</th> <th scope="col">Название</th> <th scope="col">Категория</th> <th scope="col">Цена</th> <th scope="col">Количество</th> </tr> </thead> <tbody> <?php foreach($products as $item):?> <tr> <th scope="row"><?=$item->id?></th> <td><?= $item->name?></td> <td><?= $item->category?></td> <td><?= $item->price?></td> <td><?= $item->quantity?></td> </tr> <?php endforeach;?> </tbody> </table> <?= \yii\widgets\LinkPager::widget(['pagination' => $page]) ?> Пытался реализовать с помощью slug но не работает models/Product.php Спойлер: Код PHP: <?php namespace app\models; use yii\db\ActiveRecord; use yii\behaviors\SluggableBehavior; class Product extends ActiveRecord { public static function tableName() { return 'allproduct'; } public function behaviors() { return [ [ 'class' => SluggableBehavior::class, 'attribute' => 'name', ], ]; } } ?>
Ну сначала делается пункт 8, потом пункт 7, на самом деле. Они почему-то перепутали. У роутов и действий (экшенов) могут быть параметры, например, id товара
Ну, формат адресов для таких ссылок можно придумать заранее. И строить их заранее, если построение напрямую не завязано с существованием роута для страниц отдельных товаров. Или в Юйи2 завязано? @RumaNO, Хде в задании про слаги написано? Не надо ничего выдумывать, если вас не просят!
Индюк тоже думал Не думали бы, не споткнулись бы на элементарщине: /products[?p=2, 3 и т.д.] /products/1, 2 и т.д. Усе.
Можно не завязывать, но лучше завязать. Хелперу указать контроллер, действие, параметры, и он сам сгенерит урл в соответствии с прописанными правилами. Если правила изменятся, урл тоже будет генерится по новым, не надо будет в нескольких местах переписывать.