我希望在打开起始页面/
时,订单索引按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
此网址显示了我想在/
看到的内容。
答案 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
。
如果不需要这种行为,可以通过在存在sort
和direction
查询参数时不设置默认顺序来避免这种情况。
类似这样的东西:
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'));
}
}