好的,我正在把一个应用从Yii 1.1转换到Yii 2,不幸的是我不知道如何在我的url路由中使用可选参数。即使我在配置中的urlmanager中设置了默认值,我也不能在没有第一个参数的情况下声明第二个参数,否则我会以404错误结束。
是否有方法复制可选的url参数规则(如
array( '<controller:\w+>/<action:\w+>?(/<status>)?',
'pattern' => '<controller>/<action>'
),
在Yii 2中?
3条答案
按热度按时间zaq34kh61#
这在文档中不是很清楚(请参见http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html),但答案如下:
默认情况下,规则中声明的所有参数都是必需的。如果请求的URL不包含特定参数,或者创建的URL不包含特定参数,则不会应用规则。要使某些参数为可选参数,可以配置规则的默认值属性。此属性中列出的参数为可选参数,如果未提供这些参数,则将采用指定的值。
因此,您的路线必须表示为:
oyxsuwqo2#
经过大量的搜索我找到了这个solution.in你的规则你必须设置两个参数:
然后转到控制器操作并添加以下内容:
然后您可以检查没有默认值
$status
值。***注意:***如果您的参数是后置参数,请将
get()
变更为post()
。doinxwow3#
如果您不想使用默认值而坚持使用短语法,则可以定义2个规则,确保“较长”的规则在列表中位于较高位置:
第一个规则将触发,如果它匹配一个URL与
status
元素,并将您发送到控制器/行动。如果跳过第一个规则,将触发第二个规则。请确保您的方法具有$status的默认值。