如何为zend framework 2 restful route创建一个可选的路由参数

时间:2015-10-17 17:26:16

标签: php zend-framework2

我正在使用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'
              ),
            ),
        ),

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

2 个答案:

答案 0 :(得分:1)

感谢#zftalk上的grizzm0或帮我这个。这是一个简单的正则表达式问题。删除约束中的点(。)正确匹配传入的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'
      ),
    ),
),

答案 1 :(得分:0)

'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 /角色/索引/ UNAME /约翰/应用程序的名字/ stackexchange / locanames / yourlocanames

如果你不想写appname,那么删除你的参数,这样你的路线就可以了。