根据Yii2文档,我应该构建如下URL:
$appUrl = Yii::$app->urlManager->createUrl([Yii::$app->controller->id . '/' . Yii::$app->controller->action->id,'p1' => 'v1','p2' => 'v2'] , null);
Run Code Online (Sandbox Code Playgroud)
它输出:
/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);
Run Code Online (Sandbox Code Playgroud)
这种情况下的输出是:
/index.php?r=users/index&1[p1]=v1&1[p2]=v2
而输出应该是:
的index.php?R =用户/索引&P1 = V1&P2 = V2
请注意,这$arrayParams是由另一种方法生成的,我无法提取所有的键和值,并逐个传递createUrl().这将是非常昂贵的IMO.我如何使用Yii的api实现这一目标?
Jus*_*nas 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);
Run Code Online (Sandbox Code Playgroud)