Yii2 路由:当 "/index" -action 未显式指定时 url 规则不起作用



这个路由需要一些额外的工作才能正常工作,但我看不到我需要做什么:

'http://<caregiverName:w+>.' . $domain . '/<controller:w+>/<action:w+>' => '<controller>/<action>',

当我像这样调用控制器/操作时,一切都很好。当我调用controller(没有显式索引(以调用actionIndex时,我无法捕获caregiverName参数。但是,当我调用controller/index(显式指定索引(时,它可以正常工作。

我需要在路由器中返工什么?

两件事:

不带index的呼叫规则

如果没有提供索引,则需要将其作为静态值的第二个规则。在您的第一条规则之后添加此,如下所示:

'http://<caregiverName:[w-.]+>.' . $domain . '/<controller:w+>/<action:w+>' => '<controller>/<action>',
'http://<caregiverName:[w-.]+>.' . $domain . '/<controller:w+>' => '<controller>/index',

原因是yii通常会这样做,但不是因为你明确定义的规则。把它放在后面的原因是,否则它会在另一个之前匹配,并且总是把你放在索引页上;-(。

域字符的Regex更正

在您的规则中,您使用w+作为域名的占位符。按照您指定规则的方式,它不能与除"单词字符"(a-zA-Z0-9_(之外的任何其他字符一起使用。缺少点(子域(和短划线(-(!对于域perfectly.valid-subdomain.com,您的规则不起作用。您可以在这里找到regex shorthands的axplanation。

看看我上面如何指定字符类的例子。当然,你也可以验证长度等,但这不是这个答案的范围。。。你应该明白要点。

如果您需要更多信息,请告诉我!

最新更新