这条路线需要一些额外的工作才能正常工作,但我无法看到我需要做的事情:
'http://<caregiverName:\w+>.' . $domain . '/<controller:\w+>/<action:\w+>' => '<controller>/<action>',
当我像这样控制器/动作打电话时,一切正常。当我调用控制器(没有显式索引)以调用actionIndex时,我无法捕获 caregiverName 参数。但是当我调用 controller / index (显式指定索引)时,它正常工作。
我需要在路由器上重做什么?
答案 0 :(得分:1)
两件事:
index
如果未提供索引,则需要第二条规则将索引作为静态值。在第一条规则后添加,如下所示:
'http://<caregiverName:[\w-.]+>.' . $domain . '/<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'http://<caregiverName:[\w-.]+>.' . $domain . '/<controller:\w+>' => '<controller>/index',
这样做的原因是yii会正常,但不是明确定义的规则。把它放在后面的原因是它会在另一个之前匹配并且总是把你放在索引页面上; - )。
在您的规则中,您使用\w+
作为域名的占位符。您指定规则的方式,它不适用于除“单词字符”(a-zA-Z0-9_
)之外的任何其他字符。缺少点(子域)和短划线( - )!对于域perfectly.valid-subdomain.com
,您的规则将无效。你可以找到正则表达式缩写here的轴心。
查看我上面的示例我是如何指定字符类的。你当然也可以验证长度等,但这不是这个答案的范围......你应该得到要点。
告诉我您是否需要更多信息!