yii2:使用urlmanager替换Querystring参数



我有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',
    ],

最新更新