添加自定义 CakePHP 路由

Adding a custom CakePHP Route

我如何配置路由连接来处理...

/users/{nameofuser_as_param}/{action}.json?limit_as_param=20&offset_as_param=20&order_as_param=created_at

在 routes.php 文件中调用我的控制器操作,例如...

/users/{action}/{nameofuser_as_param}/{limit_as_param}/{offset_as_param}/{order_as_param}.json?

注意:我正在使用 Cakephp 2.X

to handle...

/users/{nameofuser_as_param}/{action}.json

这很简单,in the docs

假设在路由文件中有一个对 parseExtensions 的调用,则需要这样的路由:

Router::connect(
    '/users/:username/:action',
    ['controller' => 'users'],
    [
        'pass' => ['username'],
        // 'username' => '[a-Z0-9]+' // optional param pattern
    ]
);

Router::connect 的第三个参数中的传递键用于指定应将哪些路由参数传递给控制器​​操作。在这种情况下,将传递用户名。

对于问题中的其余要求,将操作简单地 access the get arguments 会更有意义。例如:

public function view($user) 
{
    $defaults = [
        'limit_as_param' => 0,
        'offset_as_param' => 0,
        'order_as_param' => ''
    ];

    $args = array_intersect_key($this->request->query, $defaults) + $defaults;
    ...
}

如果不进行重大更改或黑客攻击,不可能使路由对 get 参数执行任何操作,因为在 运行 时间它们 only passed the path 确定哪个是匹配路由。