Если вы пытаетесь перенаправить на внешнюю ссылку и опубликовать параметры вместе с ней внутри controller/action
, тогда вы можете сделать следующее
$url='http://google.com?'.http_build_query(['param' => 12]);
return $this->redirect($url);
Но если вы хотите перенаправить на внешнюю ссылку, открыв новую вкладку, то первый ответ, который вы получите от кого-либо, будет NO
. Прежде всего, если ссылка будет открыта в новой вкладке, я бы не сказал, что это redirection
, поскольку текущая страница, которая вызывает новую вкладку, остается там, поэтому это будет означать, что оригинал или предыдущая вкладка все еще открыта, и представление загружено.
Если это так, то есть способ открыть ссылку в новой вкладке, оставаясь внутри controller/action
. Но это не означает, что вы открываете новую вкладку на стороне сервера, это фактически поможет вам завершить извлечение данных и все операции, необходимые для открытия новой ссылки, оставаясь внутри контроллера и все еще используя javascript
.
Мы можем использовать $this->getView()->registerJs();
из контроллера, чтобы зарегистрировать код JavaScript, который открывает новую вкладку, и как только загрузится представление, он автоматически откроет новую вкладку.
посмотрите этот пример действия, добавьте его в свой контроллер и попробуйте вызвать его, просто создайте пустой файл представления для загрузки.
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' );
}