9

では、多くのルートと一致する可能性のある URL があるとしたら、どのルートが勝つのでしょうか? どのアクションがディスパッチされますか?

それは単純で、最初に定義され、最初にディスパッチされますか?

たとえば、ルートは次のとおりです。

'route-catchall' => array(
    'type' => 'regex',
    'options' => array(
        'regex' => '/api/v1/.*',
        'defaults' => array(
            'controller' => 'IndexController',
            'action'     => 'apiCatchAll',
        ),
    ),
),
'route-test1' => array(
    'type' => 'literal',
    'options' => array(
        'route' => '/api/v1/route1',
        'defaults' => array(
            'controller' => 'IndexController',
            'action'     => 'apiRoute1',
        ),
    ),
),

この URLは、またはexample.com/api/v1/route1にルーティングされますapiRoute1apiCatchAll?

4

1 に答える 1

19

ルート スタックにアタッチされたルートは優先リストに格納されるため、最初に一致したルートが優先されます。

priorityルートは、メイン ルートに設定で関連付けられます。優先度が高いほど、ルートが最初にチェックされます。デフォルトでは、最初に接続されたルートが読み取られます (すべての優先度が同じか、優先度がまったくない場合)。

'route-catchall' => array(
    'type' => 'regex',
    'options' => array(
        'regex' => '/api/v1/.*',
        'defaults' => array(
            'controller' => 'IndexController',
            'action'     => 'apiCatchAll',
        ),
    ),
    'priority' => -1000,
),
'route-test1' => array(
    'type' => 'literal',
    'options' => array(
        'route' => '/api/v1/route1',
        'defaults' => array(
            'controller' => 'IndexController',
            'action'     => 'apiRoute1',
        ),
    ),
    'priority' => 9001, // it's over 9000!
),

この例でroute-test1は、優先度が高いため、最初に一致します。

于 2013-02-27T21:32:12.177 に答える