我正在尝试制作一条(或两条)路线,让我使用以下 URL 格式调用两个不同的操作。
mydomain.com/profile
mydomain.com/profile/1234/something
对于第二种格式,1234
应该是必需的整数值,而something
应该是可选字符串。第一种格式很简单,使用文字路由。我以为我可以为第二种格式添加一个分段子路由,但我无法让它工作。我试图省略第一种格式,只使用分段路线做第二种格式,但我也没有成功。
这是我尝试过的:
'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”;如果发现任何额外的“/”字符,则最后一个字符之后的任何文本都将分配给键“bar”。
这不正是我正在做的吗?如果我注释掉约束,上述错误保持不变。
我在这里想念什么?提前致谢。