我有urlmanager中的规则
'rules' => [
'products/<whatever:[-_0-9a-zA-Z]+>' => 'products/show',
],
我和Actionhow((
的控制器产品public function actionShow($name)
{
var_dump($name);
echo 'actionShow is work';
}
但是有一个错误:糟糕的请求(#400(缺少所需参数:name
如何将产品的$名称传输到控制器,或者如何从控制器中的URL获取?
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
])
);
?>
我想您应该在规则中指定变量的名称。您称其为whatever
,将其更改为name
:
'rules' => [
'products/<name:[-_0-9a-zA-Z]+>' => 'products/show',
],