好的,我正在将应用程序从yii 1.1转换为yii 2,遗憾的是我无法弄清楚如何在我的url路由中使用可选参数。即使我在配置中的urlmanager中设置默认值,我也不能在没有第一个参数的情况下声明第二个参数,否则我最终会出现404错误。
有没有办法复制可选的url参数规则,例如
array( '<controller:\w+>/<action:\w+>?(/<status>)?',
'pattern' => '<controller>/<action>'
),
在yii 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()
。