За последние 24 часа нас посетил 22671 программист и 1018 роботов. Сейчас ищут 724 программиста ...

Yii2, mvc, slug

Тема в разделе "PHP для новичков", создана пользователем RumaNO, 14 ноя 2020.

Метки:
  1. RumaNO

    RumaNO Новичок

    С нами с:
    29 окт 2020
    Сообщения:
    11
    Симпатии:
    0
    Вот задание:
    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:
    1. <?php
    2. namespace app\controllers;
    3. use app\models\Product;
    4. use yii\web\Controller;
    5. class ProductController extends Controller
    6. {
    7.     public function actionListproduct() //постраничный вывод
    8.     {
    9.         $query = Product::find()->
    10.                             select('id, name, category, price, quantity')->
    11.                             orderBy('price ASC');
    12.         $page = new \yii\data\Pagination
    13.         (
    14.             [
    15.             'totalCount' => $query->count(),
    16.             'pageSize' => 3
    17.             ]
    18.         );
    19.         $products = $query->offset($page->offset)->limit($page->limit)->all();
    20.         return $this->render('products', compact('products', 'page'));
    21.                                
    22.     }
    23. }
    24. ?>
    views/Представление products.php
    PHP:
    1. <table class="table">
    2.   <thead class="thead-dark">
    3.     <tr>
    4.       <th scope="col">Id</th>
    5.       <th scope="col">Название</th>
    6.       <th scope="col">Категория</th>
    7.       <th scope="col">Цена</th>
    8.       <th scope="col">Количество</th>
    9.     </tr>
    10.   </thead>
    11.   <tbody>
    12.       <?php foreach($products as $item):?>
    13.         <tr>
    14.             <th scope="row"><?=$item->id?></th>
    15.             <td><?= $item->name?></td>
    16.             <td><?= $item->category?></td>
    17.             <td><?= $item->price?></td>
    18.             <td><?= $item->quantity?></td>
    19.         </tr>
    20.       <?php endforeach;?>
    21.  
    22.   </tbody>
    23. </table>
    24. <?= \yii\widgets\LinkPager::widget(['pagination' => $page]) ?>
    Пытался реализовать с помощью slug но не работает
    models/Product.php
    PHP:
    1. <?php
    2. namespace app\models;
    3.  
    4. use yii\db\ActiveRecord;
    5. use yii\behaviors\SluggableBehavior;
    6.  
    7. class Product extends ActiveRecord
    8. {
    9.     public static function tableName()
    10.     {
    11.         return 'allproduct';
    12.      
    13.     }
    14.  
    15.     public function behaviors()
    16.     {
    17.          return [
    18.              [
    19.                  'class' => SluggableBehavior::class,
    20.                  'attribute' => 'name',
    21.              ],
    22.          ];
    23.     }
    24. }
    25.  
    26. ?>
     

    Вложения:

  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Ну сначала делается пункт 8, потом пункт 7, на самом деле. Они почему-то перепутали. У роутов и действий (экшенов) могут быть параметры, например, id товара
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Ну, формат адресов для таких ссылок можно придумать заранее. И строить их заранее, если построение напрямую не завязано с существованием роута для страниц отдельных товаров. Или в Юйи2 завязано?

    @RumaNO, Хде в задании про слаги написано? Не надо ничего выдумывать, если вас не просят! ;)
     
  4. RumaNO

    RumaNO Новичок

    С нами с:
    29 окт 2020
    Сообщения:
    11
    Симпатии:
    0
    Не завязано, слаг не написано, просто думал это реализовать с помощью слаг
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Индюк тоже думал :) Не думали бы, не споткнулись бы на элементарщине:
    /products[?p=2, 3 и т.д.]
    /products/1, 2 и т.д.

    Усе.
     
    RumaNO нравится это.
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Можно не завязывать, но лучше завязать. Хелперу указать контроллер, действие, параметры, и он сам сгенерит урл в соответствии с прописанными правилами. Если правила изменятся, урл тоже будет генерится по новым, не надо будет в нескольких местах переписывать.
     
    RumaNO нравится это.