Перенаправить в контроллере на внешний сайт в новой вкладке - PullRequest
0 голосов
/ 11 мая 2018

следующий код выбросит исключение

Преобразование массива в строку

Мое намерение - загрузить внешний веб-сайт со специальными параметрами в другой вкладке. Как правильно кодировать? Обратите внимание, что перенаправление не должно отображать метод внутреннего контроллера !!

$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); вернуть $ string; }

1 Ответ

0 голосов
/ 13 мая 2018

Если вы пытаетесь перенаправить на внешнюю ссылку и опубликовать параметры вместе с ней внутри 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' );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...