Yii 2可选参数

时间:2015-02-17 01:20:50

标签: php yii yii2 yii-url-manager

好的,我正在将应用程序从yii 1.1转换为yii 2,遗憾的是我无法弄清楚如何在我的url路由中使用可选参数。即使我在配置中的urlmanager中设置默认值,我也不能在没有第一个参数的情况下声明第二个参数,否则我最终会出现404错误。

有没有办法复制可选的url参数规则,例如

array( '<controller:\w+>/<action:\w+>?(/<status>)?',
'pattern' => '<controller>/<action>'                   
),

在yii 2?

2 个答案:

答案 0 :(得分:3)

这在文档中并不十分清楚(参见http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html),但答案如下:

  

默认情况下,规则中声明的所有参数都是必需的。如果请求的URL不包含特定参数,或者在没有特定参数的情况下创建URL,则该规则将不适用。要使某些参数可选,您可以配置规则的defaults属性。此属性中列出的参数是可选的,并且在未提供时将采用指定的值。

所以你的路线必须表达如下:

array(
  'pattern' => '<controller:\w+>/<action:\w+>/<status>',
  'route' => '<controller>/<action>',
  'defaults' => array('status' => '<a default value for status>')
)

答案 1 :(得分:0)

经过大量搜索,我找到了这个解决方案。在您的规则中,您必须设置两个参数:

.

然后转到您的控制器操作并添加以下内容:

array(   
   'pattern' => '<controller: \w+>/<action:\w+>/<status>',    
   'route' => '<controller>/<action>',   
),
array(
   'pattern' => '<controller:\w+><action:\w+>',
   'route => '<controller>/<action>',  
)

然后你可以检查没有默认值的 public function action...(/*Your inputs except status*/) $get = Yii::$app->request->get(); $status = $get['status'] ?? null; 值。
注意:如果您的参数是后置参数,请将 $status 更改为 get()