控制器/分包商的cakePHP3前缀路由和相同名称
我有(更准确地说是“想要”)以下结构,我尝试构建路线:控制器/分包商的cakePHP3前缀路由和相同名称,cakephp,routing,cakephp-3.0,Cakephp,Routing,Cakephp 3.0,我有(更准确地说是“想要”)以下结构,我尝试构建路线: src/Controller/OrdersController.php src/Controller/Orders/PositionsController.php 因此,路线是: /orders > OrdersController /orders/details/1 > OrdersController:details /orders/positions/details/1 > PositionsController:
src/Controller/OrdersController.php
src/Controller/Orders/PositionsController.php
因此,路线是:
/orders > OrdersController
/orders/details/1 > OrdersController:details
/orders/positions/details/1 > PositionsController:details
到目前为止,解决方案是前缀路由。但它只适用于前缀路由之前的固定路由
所以这是可行的:
Router::scope('/', function (RouteBuilder $routes)
{
$routes->connect('/orders/details/*', [
'controller' => 'Orders',
'action' => 'details'
]);
$routes->prefix('orders', function (RouteBuilder $routes)
{
$routes->fallbacks(DashedRoute::class);
});
$routes->fallbacks(DashedRoute::class);
});
但我希望它更灵活,并且不要定义每一条路线。我可以使用“:action”标志定义路线吗
最好的情况是有多个级别,如:
src/Controller/OrdersController.php
src/Controller/Orders/PositionsController.php
src/Controller/Orders/Positions/CommentsController.php
可能吗?
这将更加“结构化”,而不是OrdersController、OrdersPositionController和OrdersPositionsCommentsController,…我可以自己解决它:
Router::scope('/', function (RouteBuilder $routes)
{
$routes->prefix('orders', [], function (RouteBuilder $routes)
{
// -- order positions
$routes->connect('/positions', [
'controller' => 'Positions',
'action' => 'index'
]);
$routes->connect('/positions/:action/*', [
'controller' => 'Positions'
]);
$routes->prefix('positions', [], function (RouteBuilder $routes)
{
$routes->connect('/comments', [
'controller' => 'Comments',
'action' => 'index'
]);
});
});
$routes->fallbacks(DashedRoute::class);
});