Здравствуйте, мне нужно перенаправить клиента на другой сайт,
вот такая ошибка из-за использования TrustedRedirectResponse.
Я понял из-за чего ошибка, но не знаю почему так происходит.
Ошибка из-за "\Drupal::url".
Перед использованием TrustedRedirectResponse, я формирую ссылку, вот так:
<?php
$url = 'http://' . $_SERVER['HTTP_HOST'] . \Drupal::url('mymodule.lk', ['page' => 'pay']);
?>
и из-за этого ошибка.
Это backurl, он мне нужен, для получения ссылку по которому после необходимо перенаправить клиента
Комментарии
Блин, я что-то запутался. вы на заглушке протестировали TrustedRedirectResponse?
и не работает?
Или всё таки вопрос в том, что представленная вами конструкция не работает, т.е. не формирует ссылку?
я пробовал вот так:
<?php
return new TrustedRedirectResponse('http://example.com/foo/bar/');
?>
если использовать перед "\Drupal::url('mymodule.lk', ['page' => 'pay'])", то работает, а вот после - нет
'mymodule.lk' - это ваш роут ?
как определили?
Да
<?php
mymodule.lk:
path: '/lk/{page}'
defaults:
_title: 'LK'
_controller: '\Drupal\mymodule\Controller\LKController::content'
requirements:
_permission: 'access content'
options:
no_cache: 'TRUE'
?>
а теперь включаем xdebug и смотрим что возвращает метод \Drupal\mymodule\Controller\LKController::content
Он должен вернуть строку, чтобы ваш код работал
Он возвращает страницу, там формируются данные и через template twig возвращает страницу.
А какая разница, что он возвращает? \Drupal::url разве не должен просто вернуть ссылку на данную страницу?
нет
во первых он вернёт вам ссылку в теге ..., а вам нужна просто строка...
Ан нет, сори.
https://api.drupal.org/api/drupal/core!lib!Drupal.php/function/Drupal%3A...
должна быть строка.
Тогда проверьте в отладчике, что возвращается в
Вывел через var_dump: "/lk/pay"
а вся цепочка:
'http://' . $_SERVER['HTTP_HOST'] . \Drupal::url('mymodule.lk', ['page' => 'pay']);
т.е. ваш $url
и поставьте хотя бы devel
"http://site.ru/lk/pay".
А для чего devel?
вроде был
и точно ли ссылка будет на внешний ресурс???
Если не юзаете xdebug, то хотя бы будете отлаживать не так дико как var_dump
и точно ли ссылка будет на внешний ресурс???
Да, я формирую backurl($url), отправляю его на backend, и он мне возвращает ссылку.
точно ссылка будет внешней?
так я получаю домен своего сайта, для формирования backurl
какую в итоге ссылку вы передаете TrustedRedirectResponse ???
Пока что я тестирую с данной ссылкой:
<?php
return new TrustedRedirectResponse('http://example.com/foo/bar/');
?>
метод content() как описан?
и что за ошибка-то? Привели бы лог хотя бы...
ошибка, забыл вставить ссылку
в пастебин и ответьте про заглушку
Да сорри, просто кое-что тестил, поправил
я запутался в конец.
у вас $url - ссылка на ваш сайт, а вы его зачем то подсовываете TrustedRedirectResponse
я в TrustedRedirectResponse вставляю не $url, а другую переменную с ссылкой.
Пока что я тестирую с данной ссылкой:
<?php
return new TrustedRedirectResponse('http://example.com/foo/bar/');
?>
если работает так, и если ваша переменная - строка - ссылка на внешний ресурс - то и она будет работать.
Если не работает - смотрите что в переменной, значит что-то в ней не верно
С переменной и с ссылкой все нормально, проблема в том, что TrustedRedirectResponse не работает после "\Drupal::url".
такого быть не может.
Весь код в студию!
Если перед данным кодом:
<?php
$ur = \Drupal::url('mymodule.lk', ['page' => 'pay']);
?>
TrustedRedirectResponse работает и перенаправляет, а после данной строчки нет, это значит проблема в данной строке, где используется \Drupal::url, в чем еще может быть проблема?
xdebug
и на будущее предоставляйте сразу весь код, чтобы по кусочкам его у вас не выуживать...
и в пастебин https://pastebin.com/
Я предоставил весь код, который необходим, предоставлять прям весь код не за чем, я думаю это неправильно.
ну тогда я помог вам чем смог, более не могу.
подождите других, может они помогут
\Drupal::url - устаревший метод. Непонятно, кто вас надоумел его использовать. По-нормальному это делается так:
<?php
$url = \Drupal\Core\Url::fromRoute('mymodule.lk', ['page' => 'pay'])->toString();
?>
Если бы вы читали документацию по тем методам и классам, которые пытаетесь использовать, таких проблем бы не было.
в 8 то он же ещё работает
https://api.drupal.org/api/drupal/core!lib!Drupal.php/function/Drupal%3A...
Нашел на каком-то форуме, использовал Ваш код, но ошибка все равно осталась
потому что проблема не в нём, а в том, что вы не используете xdebug
а в чем его смысл если я через var_dump уже видел, что он возвращает.
в том, с заглушкой то работает...
с каким заглушкой? я говорю перед данной строчкой работает, а после нет.
уже писал, что:
Хорошо, спасибо за попытку помочь
Проблема ошибки может быть в том, что при генерации урл собираются какие-то метаданные для кэша и такие операции нужно выполнять внутри executeInRenderContext. Как вариант, избежать этого можно, если просто сформировать урл, как строку.
так по его словам и и формирует строку...
Я имею в виду взять напрямую буквы и слепить из них строку, без вызова всяких Url.
так он вроде так делал. даже с заглушкой пробовал.
Пока так и сделал, но надеюсь найдется решение по данной проблеме
https://www.lullabot.com/articles/early-rendering-a-lesson-in-debugging-... вот тут описано решение ошибки с early rendering. Уверен, что многим будет полезно.
Кому лень читать:
<?php Url::fromRoute('mymodule.lk', ['page' => 'pay'])->toString(TRUE);?>
В аргументе функции toString() ставим TRUE. Но информацию по ссылке выше лучше прочитать, конечно.