Yii2 Url使用多个参数进行规则

时间:2017-01-06 10:54:36

标签: php regex yii2 yii2-basic-app

我有使用多个参数设置网址规则的问题。 我在控制器"文章" 中有" description" 这样的操作:

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>',

当我通过以下链接调用网址时:

<?= Html::a( Html::encode($model->aTeaser), 
            ['article/description', 'aID' => $model->aID, 'aTitle' => $model->aTeaser], 
            ['class'=>'link_article'])
                ?>

我仍然得到这个网址:

http://test.com/article/description?aID=323&aTitle=teaser+of+this+article

而不是:

http://test.com/article/description/323/teaser+of+this+article

2 个答案:

答案 0 :(得分:1)

这是因为你解析了两次路线。 Html::a()在网址上调用Url::to(),因此无需自行执行此操作。到处都是空字符串的处理方式是什么?它应该是:

<?= Html::a(
    Html::encode($model->aTeaser), 
    ['article/description', 'aID' => $model->aID, 'aTitle' => $model->aTeaser], 
    ['class' => 'link_article']
) ?>

PS。使用<aTitle:\s+>的第二条规则有什么意义,您尝试匹配所有空白字符?

答案 1 :(得分:1)

如果您确定后面没有任何参数,则不必为最后一个参数指定转义序列:

SS_SUNKEN | SS_OWNERDRAW