1

我正在尝试在 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

非常感谢提前

4

2 回答 2

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组件支持开箱即用的布局/模板切换,所以也许你应该尝试一下。

于 2015-03-25T13:18:16.500 回答
0

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

Router::scope('/json', function($routes) {
    $routes->fallbacks('InfledtedRoute')
});
于 2015-03-26T09:07:28.583 回答