Php 如何使用可变动作和键进行路由?

Php 如何使用可变动作和键进行路由?,php,zend-framework,routing,routes,zend-framework2,Php,Zend Framework,Routing,Routes,Zend Framework2,我在Zend Framework 2中工作,具有可变操作和主键。下面是我的模块路由器。我想根据操作向它传递不同的ID(如果我删除语言,它将引用languageId;如果我删除相册,它将引用albumId)。我是否需要为语言和相册创建子路由,然后标识每个子路由使用的特定ID?或者有没有一种方法可以让我说第二个参数永远是一个数字,而动作会用这个数字做它需要做的事情 操作:删除语言ID:languageId 操作:删除相册ID:albumId 'router' => array( '

我在Zend Framework 2中工作,具有可变操作和主键。下面是我的模块路由器。我想根据操作向它传递不同的ID(如果我删除语言,它将引用languageId;如果我删除相册,它将引用albumId)。我是否需要为语言和相册创建子路由,然后标识每个子路由使用的特定ID?或者有没有一种方法可以让我说第二个参数永远是一个数字,而动作会用这个数字做它需要做的事情

操作:删除语言ID:languageId
操作:删除相册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',
                 ),
非常感谢,,
M

如果完整地写下配置,则只能在操作和标识符之间创建依赖关系。ZF2没有基于其他参数值重命名参数名的方法(如果您仔细想想,有很多理由不使用此功能)

您将有两个选择:

'pro'=>[
'type'=>'literal',
“选项”=>[
“路由”=>“/pro”,
“默认设置”=>[
'controller'=>'Pro\controller\Pro',
“操作”=>“索引”,
],
“may_terminate”=>true,
“子路由”=>[
“删除语言”=>[
'类型'=>'段',
“选项”=>[
'route'=>'/delete language/:language_id',
“默认设置”=>[
“操作”=>“删除语言”
],
'约束'=>[
“语言id'=>”[0-9]+'
],
],
],
“删除相册”=>[
'类型'=>'段',
“选项”=>[
'route'=>'/delete album/:album_id',
“默认设置”=>[
“操作”=>“删除相册”
],
'约束'=>[
“相册id”=>“[0-9]+”
],
],
],
],
],
]
或者只接受一个“id”(这是imho更喜欢的):


此外,如果按实体/域模型拆分控制器,也会有很大帮助。不要在同一控制器中删除“语言”和“相册”。分开他们!更多地考虑RESTful原则,它将使您的代码更干净。

虽然您可以使用多个路由来实现这一点,但只需使用
id
作为每个路由上的变量名似乎就简单多了。谢谢Jurian!最后我把它分成了多个控制器。谢谢你的提示(我的控制器有点变大了),这有助于使它更易于管理。
'pro' => [
    'type'    => 'segment',
    'options' => [
        'route'    => '/pro[/:action[/:id]]',
        'defaults' => [
            'controller' => 'Pro\Controller\Pro',
            'action'     => 'index',
        ],
        'constraints' => [
            'id' => '[0-9]+'
        ],
    ],
]