我在urlManager中有一条规则
'rules' => [
'products/<whatever:[-_0-9a-zA-Z]+>' => 'products/show',
],
我有控制器产品和actionShow()
public function actionShow($name)
{
var_dump($name);
echo 'actionShow is work';
}
但是有错误:错误请求(#400)缺少必需参数:名称
如何将产品的$ name传输到控制器,或者如何从控制器中的URL获取?
答案 0 :(得分:1)
我猜您应该在规则中指定变量的名称。您将其称为whatever
,将其更改为name
:
'rules' => [
'products/<name:[-_0-9a-zA-Z]+>' => 'products/show',
],
答案 1 :(得分:1)
CORRECT and COMPLETE
答案是您必须使用下面的rule
。
'rules' => [
'products/<name:[\-\w]+>' => 'products/show',
],
然后在您的产品控制器中,您不再需要在参数中传递$name
,这就是我们在规则中定义的原因,您必须使用
Yii::$app->request->queryParams['name'];
或Yii::$app->request->get('name')
获取产品名称,您的操作将如下所示
public function actionShow()
{
echo Yii::$app->request->get('name');
}
完成上述所有设置后,打开浏览器并输入
<强> http://yourdomain.com/products/some-product
强>
它会告诉你
<强> some-product
强>
当你必须创建一个指向该页面的链接时,我们可以在products
列出所有产品的菜单中,你必须为所有产品创建一个指向详细信息页面的链接,即actionShow
你会就像下面这样。
<?=Html::a($model->name,
Yii::$app->urlManager->createUrl([
'products/show',
'name'=>$model->slug
])
);
?>