Php 具有多个参数的Yii2 Url规则
我无法使用多个参数设置url规则。 我在controller“Article”中有这样的动作“description”:Php 具有多个参数的Yii2 Url规则,php,regex,yii2,yii2-basic-app,Php,Regex,Yii2,Yii2 Basic App,我无法使用多个参数设置url规则。 我在controller“Article”中有这样的动作“description”: public function actionDescription($aID, $aTitle){ ... } 'Article/description/<aID:\d+>/<aTitle:\S+>' => 'article/description', '<controller:\w+>/<id:\d+>' =&g
public function actionDescription($aID, $aTitle){ ... }
'Article/description/<aID:\d+>/<aTitle:\S+>' => 'article/description',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
然后我设置如下url规则:
public function actionDescription($aID, $aTitle){ ... }
'Article/description/<aID:\d+>/<aTitle:\S+>' => 'article/description',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
与此相反:
http://test.com/article/description/323/teaser+of+this+article
这是因为你分析了两次路线
Html::a()
正在对Url调用Url::to()
,因此无需自己执行。到处都是空字符串怎么办?应该是:
<?= Html::a(
Html::encode($model->aTeaser),
['article/description', 'aID' => $model->aID, 'aTitle' => $model->aTeaser],
['class' => 'link_article']
) ?>
PS.
第二条规则的要点是什么,您试图匹配所有空白字符?这是因为您分析了两次路由Html::a()
正在对Url调用Url::to()
,因此无需自己执行。到处都是空字符串怎么办?应该是:
<?= Html::a(
Html::encode($model->aTeaser),
['article/description', 'aID' => $model->aID, 'aTitle' => $model->aTeaser],
['class' => 'link_article']
) ?>
PS.
第二条规则的要点是什么,您尝试匹配所有空白字符?如果您确定最后一个参数后面没有任何参数,则无需指定转义序列:
'article/description/<aID:\d+>/<aTitle>' => 'article/description'
'article/description/'=>'article/description'
如果您确定最后一个参数后面没有任何参数,则不必为其指定转义序列:
'article/description/<aID:\d+>/<aTitle>' => 'article/description'
'article/description/'=>'article/description'
谢谢。你的回答帮助我理解Html::a()
调用Url::to()
。所以我删除了Url::to()
。但我使用@topher-answer以我想要的方式获取这些URL。谢谢你的帮助和清晰的解释。嗯,真的吗?所以,只要从规则中删除\S+
,并将Url::toRoute()
放在Html::a()
中,就可以解决您的问题了?在它起作用之前,我也从Html::a()
中删除了Url::toRoute()
。两个答案都很有帮助。谢谢那么请回答你的问题。你的回答帮助我理解Html::a()
调用Url::to()
。所以我删除了Url::to()
。但我使用@topher-answer以我想要的方式获取这些URL。谢谢你的帮助和清晰的解释。嗯,真的吗?所以,只要从规则中删除\S+
,并将Url::toRoute()
放在Html::a()
中,就可以解决您的问题了?在它起作用之前,我也从Html::a()
中删除了Url::toRoute()
。两个答案都很有帮助。谢谢那么请回答你的问题。它正在工作。我错过了这个解释。谢谢。它正在工作。我错过了这个解释。