Пользовательский маршрут CakePHP 3 в разбивке на страницы

#php #cakephp #pagination #cakephp-3.0

#php #cakephp #разбивка на страницы #cakephp-3.0

Вопрос:

в моем файле routes я определяю маршрут для моего метода контроллера

 $routes->connect('/category/:cat', ['controller' => 'Categories', 'action' => 'category']);
  

Мой метод контроллера таков

 public function category(){
        $this->paginate = [
                            'limit' => 2
                            ];
        $this->viewBuilder()->layout('newLayout');
        $cat = $this->request->params['cat'];
        $id = $this->Categories->findBySlug($cat)->select(['id'])->hydrate(false)->toArray();
        $cid = $id[0]['id'];

        $category = $this->ProductCategories
                    ->find("all")
                    ->select(['id', 'category_id'])
                    ->where(["category_id" => $cid])
                    ->contain(['Products' => function($q){
                                return $q->select(['id', 'sku', 'product', 'description', 'slug', 'price', 'off', 'stock', 'product_category_id'])
                                         ->where(['status' => 1])
                                         ->contain(['ProductImages' => function($q){
                                                return $q->select(['product_id','url']);
                                            }]);
                            }])->hydrate(false);

        $categories = $this->paginate($category);

        $this->set(compact('categories'));
        $this->set('_serialize', ['categories']);
    }
  

И мой URL-адрес выглядит так:

 http://localhost/mizzoli.com/category/Designer-Saree
  

Теперь, когда я нажимаю на URL-адрес разбивки на страницы, измените его на это

 http://localhost/mizzoli.com/categories/category?page=2
  

Но фактический URL, который я хочу, выглядит так

 http://localhost/mizzoli.com/category/Designer-Saree?page=2
  

А также мне нужно передать какой-то дополнительный параметр с URL-адресом разбивки на страницы, например, цвет, случай и т.д. Пожалуйста, помогите мне получить это. Я не нашел никакого решения.

Ответ №1:

У меня была похожая проблема, и я решил ее, передав нужный мне параметр внутри третьего параметра определения маршрута. Вот так:

$routes->connect('/category/:cat', ['controller' => 'Categories', 'action' => 'category'], ['pass' => ['cat']]);

У меня есть @littleylv из IRC-канала #cakephp на Freenode, чтобы поблагодарить за это решение.

Вы можете прочитать больше о передаче параметров действиям через маршруты здесь: https://book.cakephp.org/3.0/en/development/routing.html#passing-parameters-to-action

Комментарии:

1. Помог ли мой ответ @Aneh?

2. Ссылка на документацию, почему-то пример там не работает. Ваш сделал.