2017-11-20 3 views
2

のプレフィックスルーティングと同じ名前次の構造と私はルートを構築しよう:私は(より正確には「欲しい」)はcakePHP3コントローラ/サブコントローラ

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 

それは可能です:

ベストケースのように複数のレベルを持っているだろうか? これは私が自分でそれを解決することができ

答えて

0

...、代わりにはOrdersController、OrdersPositionsControllerと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); 

}); 
関連する問題