我在Zend Framework 2中工作,并且具有可变动作和主键。下面是我的模块路由器。我想根据动作将不同的ID传递给它(如果我删除了它将引用languageId的语言,如果我删除它将引用albumId的相册)。我是否需要为语言和专辑创建子路由,然后确定每个子路由使用的特定ID?或者有没有办法我可以说第二个参数将始终是一个数字,并且该操作将使用该数字执行所需的操作?
操作:deleteLanguage ID:languageId
ACtion:deleteAlbum ID:albumId
'router' => array(
'routes' => array(
'pro' => array(
'type' => 'segment',
'options' => array(
'route' => '/pro[/][:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'language_id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Pro\Controller\Pro',
'action' => 'index',
),
非常感谢, 中号
答案 0 :(得分:0)
如果您完全记下配置,则只能在操作和标识符之间创建依赖关系。 ZF2没有方法根据其他参数值重命名参数名称(如果你仔细想想,有充分的理由没有这个功能)。
您有两种选择:
'pro' => [
'type' => 'literal',
'options' => [
'route' => '/pro',
'defaults' => [
'controller' => 'Pro\Controller\Pro',
'action' => 'index',
],
'may_terminate' => true,
'child_routes' => [
'delete-language' => [
'type' => 'segment',
'options' => [
'route' => '/delete-language/:language_id',
'defaults' => [
'action' => 'deleteLanguage'
],
'constraints' => [
'language_id' => '[0-9]+'
],
],
],
'delete-album' => [
'type' => 'segment',
'options' => [
'route' => '/delete-album/:album_id',
'defaults' => [
'action' => 'deleteAlbum'
],
'constraints' => [
'album_id' => '[0-9]+'
],
],
],
],
],
]
或接受你处理" id"只有(这是更优选的imho):
'pro' => [
'type' => 'segment',
'options' => [
'route' => '/pro[/:action[/:id]]',
'defaults' => [
'controller' => 'Pro\Controller\Pro',
'action' => 'index',
],
'constraints' => [
'id' => '[0-9]+'
],
],
]
此外,如果您按实体/域模型拆分控制器,它会有很大帮助。不要删除"语言"并删除了一张"专辑"在同一个控制器中。分开他们!在RESTful原则中考虑更多,它将使您的代码更加清晰。