控制器/分包商的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);

});