0

ルーターは、コントローラーとアクションの定義の前にカスタム パラメーターを定義します。

Router::connect(
    '/:store/:controller/:action/*',
    array(),
    array(
       'store' => 'shop\/[^\/]+'
    )
);

Router::mapResources('Invoices');
Router::parseExtensions();

「/shop/x」で始まるリクエストに一致します。ここで、x は ID です。

http://host.com/shop/1/invoices/view/1  

ただし、上記の定義は REST リクエストを適切にルーティングしません。

http://host.com/shop/1/invoices/1.json  (doesn't work)

回避策として、アクションを渡すことで機能します (ただし、これは REST には理想的ではありません)。

http://host.com/shop/1/invoices/view/1.json

残りのルートを機能させる方法についてのアイデアはありますか?

4

1 に答える 1

3

connect 関数の 3 番目のパラメーターで使用できる特別なキーがあります。

pass は、どのルーティング パラメータをパス配列にシフトするかを定義するために使用されます。渡すパラメータを追加すると、通常のルート配列から削除されます。元。'pass' => 配列('id')

Router::connect(
    '/:store/:controller/:id',
    array('[method]'=>'GET', 'action'=>'view'),
    array(
       'store' => 'shop\/[^\/]+',
       'id' => '[0-9]+',
       'pass' => array('id')
    )
);

CakePHP Routing Documentation から解決策を見つけました。

于 2015-01-13T07:40:14.243 に答える