以下代码将抛出异常
数组到字符串转换
我的目的是在另一个标签中加载带有特殊参数的外部网站。应该如何正确编码?请注意,重定向不应该呈现内部控制器方法!!
$paramValue = "12";
return $this->redirect("http://example.com?param=$paramValue", ['target' => '_blank']);
我所做的一切 - 没有错误 - 是创建链接,但这不一样。所以,别无选择!
<center><?php
echo Html::a('StepStone laden', $url, ['class' => 'btn btn-success btn-block', 'target' => '_blank', 'title' => 'Load StepStone', 'data' => ['pjax' => '0']]);
?></center><?php
编辑(穆罕默德): 这是我的解决方案,因为它实际存在:
/* It's not possible to render external URL in aonther tab using php. So, following order will render external URL in same tab:
return $this->redirect($url); */
private function RenderBoerse($name, $DynamicModel) {
$ReplaceJob = $DynamicModel->job;
$ReplaceTown = $DynamicModel->place;
$Jobboerse = LJobboersen::findOne(['name' => $name])->ergebnis_seite;
$url = $this->WebStringErsetzen($Jobboerse, "###", $ReplaceJob);
$url = $this->WebStringErsetzen($url, "&&&", $ReplaceTown);
?>
<center>
<?= Html::a("$name laden", $url, ['class' => 'btn btn-success btn-block', 'target' => '_blank', 'title' => "Load $name"]);
?></center><?php
}
私有函数WebStringErsetzen($ str,$ suchen,$ ersetzen){ $ string = str_replace($ suchen,$ ersetzen,$ str); return $ string; }
答案 0 :(得分:2)
如果您尝试重定向到外部链接并在controller/action
内发布参数,那么您可以执行以下操作
$url='http://google.com?'.http_build_query(['param' => 12]);
return $this->redirect($url);
但是,如果您想通过打开新标签重定向到外部链接,那么您将从任何人那里获得的第一个回复是 NO
。最重要的是,如果要在新标签中打开链接,那么我不会说它是 redirection
,因为调用新标签的当前页面仍然存在,所以这意味着仍然打开原始或上一个选项卡并加载视图。
如果这是正确的,那么您可以通过留在controller/action
内来打开新标签中的链接。但这并不意味着您正在使用服务器端打开一个新选项卡,它实际上将帮助您完成数据提取以及打开保留在控制器内并仍使用javascript
的新链接所需的所有操作。
我们可以在控制器中使用$this->getView()->registerJs();
来注册一个打开新标签的javscript coed,一旦视图加载,它将自动打开新标签。
看到此示例操作将其添加到您的控制器中并尝试调用它,只需创建一个要加载的空视图文件。
public function actionExternalLink() {
$url = 'http://google.com?' . http_build_query ( [ 'param' => 12 ] );
$script = <<<JS
function openInNewTab(url) {
var win = window.open(url, '_blank');
win.focus();
}
openInNewTab('$url');
JS;
$this->getView ()->registerJs ( $script , \yii\web\View::POS_READY );
return $this->render ( 'external' );
}