添加自定义CakePHP路由

时间:2015-10-02 07:09:27

标签: php cakephp cakephp-2.0 cakephp-2.3

如何配置路由连接以处理...

/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

1 个答案:

答案 0 :(得分:1)

  

处理......

     

/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的第3个参数中的密钥用于指定应将哪个路由参数传递给控制器​​操作。在这种情况下,将传递用户名。

对于问题中的其他要求,简单access the get arguments的行动更有意义。 E.g:

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以确定哪个是匹配路径。