@T_verdisla_V
Начинающий

Как быть с контроллером?

Здравствуйте! При переходе по ссылке с главной страницы на страницу с какой-то конкретной категории, у меня задействуется CategoryController который является дочерним (по маршрутам) от модуля Shop, вот конфигурационный файл где это описано:
'router' => [
        'routes' => [
            'shop' => [
                'type'    => Literal::class,
                'options' => [
                    // Change this to something specific to your module
                    'route'    => '/shop/',
                    'defaults' => [
                        'controller'    => Controller\IndexController::class,
                        'action'        => 'index',
                    ],
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'category' => [
                        'type'    => Segment::class,
                        'options' => [
                            'route'    => 'category/[:action/][:id/]',
                            'constraints' => [
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'id' => '[0-9]+',
                            ],
                            'defaults' => [
                                'controller'    => Controller\CategoryController::class,
                                'action'        => 'index',
                            ]
                        ]
                    ],
                    // You can place additional routes that match under the
                    // route defined above here.
                ],
            ],
        ],
    ],

На странице, которая обрабатывается этим контроллером есть пагинатор. Адрес страницы получается
zblog.local/shop/category/1

Когда работаешь с пагинатором адрес изменяется на
zblog.local/shop/category/?page=2
, но id должен оставаться так как на нем завязана работа контроллера. Код который отображает пагинатор на странице:
<?= $this->paginationControl($products,
            'Sliding',
            'application/partial/paginator', 
            ['route' => 'shop/category']); ?>

Я так понял, что бы пагинатор работал правильно в route нужно дописать id, но что бы это сделать, нужно для category прописать дочерний маршрут в конфигурационном файле. Я просто не знаю как правильно это сделать, нужно что бы id обязательно был цифрами. Подскажите кто знает!
  • Вопрос задан
  • 392 просмотра
Решения вопроса 1
@novrm
Значит так - пиши такой маршрут.
А об пагинаторе я тебе отписал дальше.
'router' => [
    'routes' => [

        /** Configuration of the 'shop' routes. */
        'shop' => [
            'type'    => 'Literal',
            'options' => [
                'route'    => '/shop/',
                'defaults' => [
                    'controller' => Controller\IndexController::class,
                    'action'     => 'index',
                ],
            ],
            'may_terminate' => true,
            'child_routes' => [

                /** Configuration of the 'shop/category' routes. */
                'category' => [
                    'type'    => 'Literal',
                    'options' => [
                        'route'    => 'category/',
                        'defaults' => [
                            'controller' => Controller\CategoryController::class,
                            'action'     => 'index',
                        ],
                    ],
                    'may_terminate' => true,
                    'child_routes' => [

                        /** Configuration of the 'shop/category/action' routes. */
                        'action' => [
                            'type' => 'Segment',
                            'options' => [
                                'route' => '[:action]',
                                'constraints' => [
                                    'action' => '(create)',
                                ],
                            ],
                        ],

                        /** Configuration of the 'shop/category/category' routes. */
                        'category' => [
                            'type' => 'Segment',
                            'options' => [
                                'route' => '[:id/]',
                                'constraints' => [
                                    'id' => '[0-9]+',
                                ],
                                'defaults' => [
                                    'id' => null,
                                ],
                            ],
                            'may_terminate' => true,
                            'child_routes' => [

                                /** Configuration of the 'shop/category/category/action' routes. */
                                'action' => [
                                    'type' => 'Segment',
                                    'options' => [
                                        'route' => '[:action]',
                                        'constraints' => [
                                            'action' => '(update|delete)',
                                        ],
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
],
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@iaskivsky
Мне одному маршруты в этом фреймворке кажутся убогими?
Ответ написан
@OrlandoST
Передавайте id в параметрах.
Вот пример:
<?= $this->paginationControl($products,
'Sliding',
'application/partial/paginator',
['route' => 'shop/category', 'params' => array('id' =>1')]); ?>
Ответ написан
Ваш ответ на вопрос

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

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