【问题标题】:cakephp 3 prefix routingcakephp 3 前缀路由
【发布时间】:2015-03-25 13:09:21
【问题描述】:

我正在尝试在 cakephp 3 中设置路由前缀,因此任何以 /json/ 开头的 URL 都会获取前缀键集,我可以在应用程序控制器中相应地更改布局。除此之外,他们应该使用通常的控制器和动作。我已将以下内容添加到 routes.php

$routes->prefix('json', function($routes) {
    $routes->connect(
        '/:controller/:action/*',
        [],
        ['routeClass' => 'InflectedRoute']
    );
});

我想将所有以 json 作为第一个 url 段的请求定向到第二个 url 段中指定的控制器。例如/json/users/add_account_type/ 转到用户控制器。但是,当访问此 URL 时,我会收到以下消息:

错误:在文件中创建下面的类 UsersController: src/Controller/Json/UsersController.php

而我希望它使用

src/Controller/UsersController.php

我认为这应该是可能的,但在查阅这本书时我不太明白自己做错了什么。我的代码部分基于:CakePHP3.x controller name in url when using prefix routing

提前非常感谢

【问题讨论】:

    标签: php cakephp-3.0 cakephp-routing


    【解决方案1】:

    这就是前缀路由现在在 3.x 中的工作方式,如文档中所述,前缀被映射到子命名空间,从而映射到子文件夹中的单独控制器。

    http://book.cakephp.org/3.0/en/development/routing.html#prefix-routing

    如果您想改变这种行为(我真的不明白为什么),一种方法是实现自定义 ControllerFactory 调度程序过滤器。

    http://book.cakephp.org/3.0/en/development/dispatch-filters.html

    附带说明,RequestHandler 组件支持开箱即用的布局/模板切换,所以也许你应该尝试一下。

    【讨论】:

    • 感谢您为我指明正确的方向。看起来 RequestHandler 功能正是我所需要的。
    【解决方案2】:

    前缀路由是一种将部分路由命名空间到专用控制器的方法。对于您所描述的内容,您似乎想要的是范围而不是前缀:

    Router::scope('/json', function($routes) {
        $routes->fallbacks('InfledtedRoute')
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-14
    • 2011-06-09
    • 2013-10-09
    • 2016-10-18
    • 2014-12-17
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多