以下代码将抛出异常
数组到字符串的转换
我的目的是在另一个选项卡中加载具有特殊参数的外部网站。应该如何正确编码?请注意,重定向不应呈现内部控制器方法!
$paramValue = "12";
return $this->redirect("http://example.com?param=$paramValue", ['target' => '_blank']);
Run Code Online (Sandbox Code Playgroud)
我所实现的一切 - 没有错误 - 就是创建链接,但这不一样。所以,别无选择!
<center>
<?php echo Html::a(
'StepStone laden',
$url,
[
'class' => 'btn btn-success
btn-block',
'target' => '_blank',
'title' => 'Load StepStone',
'data' => ['pjax' => '0']
]
);
?>
</center>
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案,因为它实际上存在:
/* 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
}
private function WebStringErsetzen($str, $suchen, $ersetzen) {
$string = str_replace($suchen, $ersetzen, $str);
return $string;
}
Run Code Online (Sandbox Code Playgroud)
如果您尝试重定向到外部链接并从内部发布参数,controller/action那么您可以执行以下操作
$url='http://google.com?'.http_build_query(['param' => 12]);
return $this->redirect($url);
Run Code Online (Sandbox Code Playgroud)
但是,如果您想通过打开新选项卡重定向到外部链接,那么您从任何人那里得到的第一个响应都是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' );
}
Run Code Online (Sandbox Code Playgroud)