cakehp3前缀路由


cakephp 3 prefix routing

我正试图在cakehp3中设置一个路由前缀,这样任何以/json/开头的URL都可以设置前缀键,我可以在应用程序控制器中相应地更改布局。除此之外,他们应该使用通常的控制器和操作。我已将以下内容添加到routes.php

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

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

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

而我希望它使用

src/Controller/UsersController.php

我认为这应该是可能的,但在查阅这本书时,我不太明白自己做错了什么。我的代码部分基于:当使用前缀路由时,url中的CakePHP3.x控制器名称

提前感谢

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

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

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

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

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

  • http://book.cakephp.org/3.0/en/controllers/components/request-handling.html
  • http://book.cakephp.org/3.0/en/views/json-and-xml-views.html

前缀路由是一种将部分路由命名为专用控制器的方式。你想要的似乎是一个范围,而不是前缀,对于你所描述的:

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