CakePHP 3.9路由前缀

i5desfxk  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(169)

我的/ Scope中有以下路径:

$routes->connect('/api/:controller/:action', ['prefix'=>'api'], ['routeClass' => 'DashedRoute']);

在我的源代码/控制器/UsersController. php上,我有api_index()
但是当我转到url api/Users/index时,它说找不到控制器,因为它要求我在控制器文件夹上名为Api的子文件夹内添加另一个用户控制器。
在Cakephp 2.x使用这个行为之前,我如何才能在CakePHP 3.x上实现与Cakephp 2.x上相同的行为呢?
非常感谢!

xxhby3vn

xxhby3vn1#

来自cakephp的书

前缀路由静态Cake\Routing\Router::prefix($name,$callback)许多应用程序需要一个管理部分,特权用户可以在其中进行更改。这通常通过一个特殊的URL(如/admin/users/edit/5)来完成。在CakePHP中,前缀路由可以通过使用前缀作用域方法来启用:

use Cake\Routing\Route\DashedRoute;

Router::prefix('admin', function (RouteBuilder $routes) {
    // All routes here will be prefixed with `/admin`
    // And have the prefix => admin route element added.
    $routes->fallbacks(DashedRoute::class);
})

;
前缀被Map到应用程序的控制器名称空间中的子名称空间。通过将前缀作为单独的控制器,您可以创建更小更简单的控制器。带前缀和不带前缀的控制器共有的行为可以使用继承、组件或特征来封装。使用我们的用户示例,访问URL /admin/users/edit/5将调用src/Controller/Admin/UsersController.php的edit()方法,传递5作为第一个参数。
您可以使用以下路径将URL /adminMap到页面控制器的index()操作:

Router::prefix('admin', function (RouteBuilder $routes) {
    // Because you are in the admin scope,
    // you do not need to include the /admin prefix
    // or the admin route element.
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'index']);
});

https://book.cakephp.org/3/en/development/routing.html#prefix-routing

相关问题