如何为 Zend Framework 2 RESTful 路由创建可选的路由参数


how to create an optional route parameter for zend framework 2 restful route

>我正在使用 zend 框架 2,我需要为路由段创建一个可选参数,该参数也有两个必需的参数。 下面是来自 module.config 的片段.php描述了路由。 我的理解是,在 ZF2 中,可以使用

[/:param]

你可以看到的是我所拥有的。 只要我发送可选参数,它就可以正常工作,但是当我省略它时,前两个参数"uname 和 appname"一起附加到"uname"约束中。 该路由是父路由。

'roles' => array(
            'type' => 'segment',
            'options' => array(
              'route' => '/roles/:uname/:appname[/:locnames]',
              'constraints' => array(
                'uname' => '[a-zA-Z].+',
                'appname' => '[a-zA-Z0-9_-].+',
                'locnames' => 'locnames'
             ),
             'defaults' => array(
                 'controller' => 'Roles/Controller/RolesController'
              ),
            ),
        ),

我在这里缺少什么,我知道您可以定义可选参数,但我无法找出正确的格式

感谢 grizzm0 在 #zftalk 或帮助我解决这个问题。 这是一个简单的正则表达式问题。 删除约束中的点 (.( 与传入的 url 参数正确匹配。 所以我的路线现在看起来像这样:

'roles' => array(
    'type' => 'segment',
    'options' => array(
      'route' => '/roles[/:action][/uname/:uname][/appname/:appname][/locnames/:locnames]',
      'constraints' => array(
        'uname' => '[a-zA-Z]+',
        'appname' => '[a-zA-Z0-9_-]+',
        'locnames' => 'locnames'
     ),
     'defaults' => array(
         'controller' => 'Roles/Controller/RolesController'
      ),
    ),
),
'roles' => array(
        'type' => 'segment',
        'options' => array(
          'route' => '/roles[/:action][/uname/:uname][/appname/:appname][/locnames/:locnames]',
          'constraints' => array(
            'uname' => '[a-zA-Z].+',
            'appname' => '[a-zA-Z0-9_-].+',
            'locnames' => 'locnames'
         ),
         'defaults' => array(
             'controller' => 'Roles/Controller/RolesController'
          ),
        ),
    ),

您可以这样配置路由。在您的角色控制器中您有一些操作实时索引。所以你的路线将是siteURL/roles/index/uname/john/appname/stackexchange/locanames/yourlocanames

在这里,如果您不想编写 AppName,请删除您的参数,以便您的路由正常工作。