2015-10-17 69 views
1

我正在使用zend框架2,我需要为还有两个必需参数的路段创建一个可选参数。下面是描述路由的module.config.php的一个片段。我的理解是,在ZF2可选路径参数可以通过使用如何为zend框架2创建可选的路由参数2宁静的路由

[/: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' 
      ), 
      ), 
     ), 

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

回答

0

感谢#zzftalk上的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' 
    ), 
    ), 
), 
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/JOHN /应用程序的名字/ stackexchange/locanames/yourlocanames

在这里,如果你不想写应用程序的名字,然后删除您选择paramater所以你的路线会工作。

+0

感谢您的回答,但是按照您的建议配置路线不起作用。控制器无法与路由器相匹配。我忘了提及我的控制器扩展了AbstractRestfulController。我只是想要一个像/ roles/uname/appname/[locnames]这样的休息url也许AbstractRestfulController不允许路由中的可选参数 – Rodney