如何在cakephp 3.x路由中包括分页参数

时间:2018-11-19 18:57:57

标签: cakephp cakephp-3.0

我希望在打开起始页面/时,订单索引按ID降序排列。这是我到目前为止尝试过的路线:

$routes->connect('/', ['controller' => 'Orders', 'action' => 'index', 'sort' => 'id', 'direction' => 'desc']);

$routes->connect('/', ['controller' => 'Orders', 'action' => 'index', '?' => ['sort' => 'id', 'direction' => 'desc']]);

$routes->connect('/', ['controller' => 'Orders', 'action' => 'index', 'pass' => ['sort' => 'id', 'direction' => 'desc']]);

即使当我将第二个选项与?一起使用时,请求对象看起来也很好,但是它们都不起作用(即忽略排序参数)。

我该如何设置路线?

编辑:

/?sort=id&direction=desc

此网址显示了我想在/看到的内容。

1 个答案:

答案 0 :(得分:1)

您可以使用RedirectRoute来发出HTTP 301重定向:

$routes->connect('/', ['controller' => 'Orders', 'action' => 'index', '?' => ['sort' => 'id', 'direction' => 'desc']], ['routeClass' => 'RedirectRoute']);

或者,您可以在控制器中设置an example of using a texture matrix here并在其中添加顺序。请注意,即使您单击另一列进行排序,该顺序也将保持不变,并且生成的SQL将具有以下内容:ORDER BY Orders.created ASC, Orders.id DESC

如果不需要这种行为,可以通过在存在sortdirection查询参数时不设置默认顺序来避免这种情况。

类似这样的东西:

class OrdersController extends AppController
{

    /**
     * Index method
     *
     * @return \Cake\Http\Response|void
     */
    public function index()
    {
        $query = $this->getRequest()->getQueryParams();

        if (empty($query['sort']) || empty($query['direction'])) {
            $this->paginate['order'] = ['Orders.id' => 'desc'];
        }

        $orders = $this->paginate($this->Orders);

        $this->set(compact('orders'));
    }
}