以下のURL形式で2つの異なるアクションを呼び出すことができるルート(または2つ)を作成しようとしています。
mydomain.com/profile
mydomain.com/profile/1234/something
2番目の形式の場合、1234
は必須の整数値である必要something
があり、オプションの文字列である必要があります。最初の形式は、リテラルルートを使用することで簡単になります。2番目の形式のセグメント子ルートを追加できると思いましたが、機能させることができません。最初のフォーマットを省略し、セグメントルートで2番目のフォーマットのみを実行しようとしましたが、それでも成功しませんでした。
これが私が試したことです:
'profile' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/profile',
'defaults' => array(
'controller' => 'User\Controller\User',
'action' => 'profile'
)
),
'child_routes' => array(
'profile_view' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/:code[/:username]',
'constraints' => array(
'code' => '[0-9]*',
'username' => '[a-zA-Z0-9_-]*'
),
'defaults' => array(
'controller' => 'User\Controller\User',
'action' => 'view_profile'
)
)
)
)
)
の場合mydomain.com/profile
、次のエラーが発生します。
Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'No RouteMatch instance provided'
の場合mydomain.com/1234/something
、次のエラーが発生します。
Fatal error: Uncaught exception 'Zend\Mvc\Router\Exception\InvalidArgumentException' with message 'Missing parameter "code"'
セグメントがオプションの場合は、角かっこで囲む必要があります。例として、「/:foo [/:bar]」は「/」の後にテキストが続くものと一致し、それをキー「foo」に割り当てます。追加の「/」文字が見つかった場合、最後の文字に続くテキストがキー「バー」に割り当てられます。
それは私がしていることとまったく同じではありませんか?制約をコメントアウトしても、上記のエラーは同じままです。
ここで何が欠けていますか?前もって感謝します。