В Drupal 7 я использую следующий код.
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Какой код я должен использовать в Drupal 8?
В Drupal 7 я использую следующий код.
function my_goto($path) {
drupal_goto($path, array(), 301);
}
Какой код я должен использовать в Drupal 8?
Ответы:
Это код, который следует использовать в Drupal 8. Для получения дополнительной информации см. Запись изменения .
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path);
$response->send();
return;
}
use Symfony\Component\HttpFoundation\RedirectResponse;
Для того, чтобы построить на ответ Ану Мэтью ;
Чтобы добавить код состояния, это просто второй параметр в классе RedirectResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
function my_goto($path) {
$response = new RedirectResponse($path, 302);
$response->send();
return;
}
Я еще не работал в Drupal 8, но согласно документации drupal_goto
удалена из Drupal 8.
Вместо drupal_goto
вас нужно написать:
return new RedirectResponse(\Drupal::url('route.name'));
и как то так с параметрами:
return new RedirectResponse(\Drupal::url('route.name', [], ['absolute' => TRUE]));
Проверьте здесь https://www.drupal.org/node/2023537 и класс RedirectResponse
\Drupal::url('route.name')
ваш URL или, возможно, абсолютный URL.
Это может быть достигнуто путем использования встроенных симфоний EventDispatcher Component. Все, что вам нужно сделать, это создать собственный модуль. Добавьте ваш файл services.yml и предоставьте соответствующий сервисный конфиг.
services:
mymodue.subscriber:
class: Drupal\my_module\EventSubscriber
tags:
- { name: event_subscriber }
в каталоге src модулей добавьте свой класс EventSubscriber.php и опишите здесь методы.
<?php
use Symfony\Component\HttpFoundation\RedirectResponse;
public function checkForCustomRedirect(GetResponseEvent $event) {
$route_name = \Drupal::request()->attributes->get(RouteObjectInterface::ROUTE_NAME);
if($route_name === 'module.testPage') {
$event->setResponse(new RedirectResponse($url, $status = 302,$headers);
}
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events = [];
$events[KernelEvents::REQUEST][] = array('checkForCustomRedirect');
return $events;
}
Отлично работающий код перенаправления для меня заключается в следующем:
$response = new RedirectResponse($path);
return $response->send();
В любых других случаях я получаю какие-то исключения или ошибки, например: LogicException: контроллер должен вернуть ответ ...
ИЛИ
https://www.drupal.org/project/drupal/issues/2852657
Об этом уже идет дискуссия, надеюсь, это поможет!
это работает для внутреннего или внешнего перенаправления:
use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Url;
$url = Url::fromUri('internal:/node/27'); // choose a path
// $url = Url::fromUri('https://external_site.com/');
$destination = $url->toString();
$response = new RedirectResponse($destination, 301);
$response->send();