Yii2 Url 多参数​​规则

Yii2 Url rules with multiple parameters

我在使用多个参数设置 url 规则时遇到问题。 我在控制器 "Article" 中有这样的操作 "description"

public function actionDescription($aID, $aTitle){ ... }

然后我设置 url 规则如下:

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

当我像这样通过 link 调用 url 时:

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

我仍然明白这个 url:

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

而不是这个:

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。 <aTitle:\s+> 的第二条规则在您尝试匹配所有空白字符时有何意义?

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

'article/description/<aID:\d+>/<aTitle>' => 'article/description'