Yii2 - 带有参数数组的createUrl()?

时间:2015-07-15 07:13:31

标签: php yii2

根据Yii2 documentation,我应该构建如下的URL:

$appUrl = Yii::$app->urlManager->createUrl([Yii::$app->controller->id . '/' . Yii::$app->controller->action->id,'p1' => 'v1','p2' => 'v2'] , null);

输出:

  

/index.php?r=users%2Findex&p1=v1&p2=v2

哪个是正确的输出。现在,如果我有一个直接想要传递给createUrl()方法的一系列参数,该怎么办?以下代码解释了我的问题:

$arrayParams = ['p1' => 'v1' , 'p2' => 'v2'];
$appUrl = Yii::$app->urlManager->createUrl([Yii::$app->controller->id . '/' . Yii::$app->controller->action->id,$arrayParams] , null);

这种情况下的输出是:

  

/index.php?r=users/index&1 [P1] = V1&安培; 1 [P2] = V2

而输出应该是:

  

的index.php R =用户/索引&安培; P1 = V1&安培; P2 = V2

请注意,$arrayParams是由其他方法生成的,我无法提取所有密钥和值,并在createUrl()中逐个传递。这将是非常昂贵的IMO。我如何使用Yii的api实现这一目标?

2 个答案:

答案 0 :(得分:16)

使用array_merge创建所需的数组结构。

$controller = Yii::$app->controller;
$arrayParams = ['p1' => 'v1' , 'p2' => 'v2'];

$params = array_merge(["{$controller->id}/{$controller->action->id}"], $arrayParams);

Yii::$app->urlManager->createUrl($params);

答案 1 :(得分:1)

使用Yii::$app->controller->route

可以实现相同的结果
$route = Yii::$app->controller->route;
$arrayParams = ['p1' => 'v1' , 'p2' => 'v2'];
$params = array_merge([$route], $arrayParams);
Yii::$app->urlManager->createUrl($params);