Редирект на другой сайт

Аватар пользователя Artalek Artalek 10 ноября 2020 в 16:09

Здравствуйте, как мне в Drupal 8 в PHP, перенаправить клиента на другой сайт?
Пробовал вот так:

<?php
$url 
'https://drupal.ru/';
return new 
RedirectResponse($url);
?>

Но, это вариант не работает, т.к. RedirectResponse редиректит только внутри сайта.

Подскажите пожалуйста, как можно кодом PHP перенаправить клиента на другой сайт?

Лучший ответ

Аватар пользователя vlucas vlucas 10 ноября 2020 в 18:25
1

If the route name is not known use RedirectResponse with a URL. When redirecting to an external location, use TrustedRedirectResponse.

https://www.drupal.org/node/2023537

Комментарии

Аватар пользователя Artalek Artalek 10 ноября 2020 в 16:16

Да, мне нужно перенаправить в определённый момент клиента на другой сайт(для оплаты), и чтобы потом оттуда после оплаты его вернули обратно.

Аватар пользователя Artalek Artalek 10 ноября 2020 в 16:18

не совсем, готовые модули тут не подойдут, у меня уже почти все готово, осталась только проблема с этим редиректом

Аватар пользователя vlucas vlucas 10 ноября 2020 в 17:50

Drupal 8 в PHP

очень всё обширно, нужно больше информации, редирект когда?
что пишите, контроллер, форма? и т.д.

Аватар пользователя Artalek Artalek 10 ноября 2020 в 18:05

Не до конца Вас понимаю, он получает нужные данные из backend, выводит сумму, при нажатии на кнопку должен отправить клиента на другой сайт для оплаты

Аватар пользователя vlucas vlucas 10 ноября 2020 в 18:12

ох, не увидел сразу, что у вас на внешний ресурс...
Тогда вам верно сказали, что js - это нормальная практика

Аватар пользователя Artalek Artalek 10 ноября 2020 в 18:16

Я вот просто не понимаю, неужели это нормально в коде php использовать код js для перенаправления на другой сайт? Как это сделать правильно и красиво?

Аватар пользователя vlucas vlucas 10 ноября 2020 в 18:20

вас никто не заставляет в php писать js
Js вы напишите в js (своей либе) и аттачите её в своём контроллере. Модули оплаты многие перенаправляют на сайт оплаты именно js (кнопочку "оплатить" нажимают)

Я не знаю в теоории можно ли сделать роут на remote url, наверное да, но для такой задачи, думаю, не стоит заморачиваться.

Аватар пользователя Artalek Artalek 10 ноября 2020 в 18:23

Просто мне нужно после нажатия на кнопку, кое-что что обработать на стороне php, и после перенаправить на другой сайт.
И получается мне надо поставить обработчик на клик по кнопке, и в js отправить ajax запрос в контроллер для обработки информации и после через js перенаправить на другой сайт?

Аватар пользователя Artalek Artalek 10 ноября 2020 в 18:34

Пробовал сегодня его использовать, но он выдавал ошибку, попробую завтра ещё раз и отпишусь, спасибо за помощь

Аватар пользователя Artalek Artalek 11 ноября 2020 в 8:12

Я понял из-за чего ошибка, но не знаю почему так происходит.
Ошибка из-за "\Drupal::url".
Перед использованием TrustedRedirectResponse, я формирую ссылку, вот так:

<?php
$url 
'http://' $_SERVER['HTTP_HOST'] . \Drupal::url('mymodule.lk', ['page' => 'pay']);
?>

и из-за этого ошибка.

Аватар пользователя Artalek Artalek 11 ноября 2020 в 8:43

Это backurl, он мне нужен, для получения ссылку по которому после необходимо перенаправить клиента

Аватар пользователя vlucas vlucas 11 ноября 2020 в 8:48

я бы лучше сначала протестил TrustedRedirectResponse на заглушке, а затем открывал бы другую тему, что неправильно у меня здесь:

$url = 'http://' . $_SERVER['HTTP_HOST'] . \Drupal::url('mymodule.lk', ['page' => 'pay']);

Smile

Аватар пользователя vlucas vlucas 11 ноября 2020 в 8:52

просто проблемы нужно решать по мере их поступления )) чтобы работа в кашу не превращалась