Всем привет. Давно не обращался, но сам выяснить не смог. Устаноил чистый друпал и пытаюсь написать событие переадресации при загрузке. Вот код:
BootAccesFlag.php
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\Core\Url;
use Symfony\Component\HttpKernel\Event\RequestEvent;
/**
* Provides a MyModuleSubscriber.
*/
class BootAccesFlag implements EventSubscriberInterface {
/**
* // only if KernelEvents::REQUEST !!!
* @see Symfony\Component\HttpKernel\KernelEvents for details
*
* @param Symfony\Component\HttpKernel\Event\GetResponseEvent $event
* The Event to process.
*/
public function MyModuleLoad(GetResponseEvent $event) {
// @todo remove this debug code
if (Условие) {
$url = Url::fromRoute('node.add_page')->toString();
$response = new RedirectResponse($url, 301);
$event->setResponse($response);
}
}
/**
* {@inheritdoc}
*/
static function getSubscribedEvents() {
$events[KernelEvents::REQUEST][] = array('MyModuleLoad', 250);
return $events;
}
}
Но идет циклическая переадресация на /node/add и выдается ошибка "слишком много переадресаций"
Так же пробовал и Middleware API
Пробовал и в форме и везде.
И писал и return; и exit;
Голову уже сломал, кто может сталкивался и есть ли решение?
Голову сломал уже в чем проблема!
Друпал 8,9
Заранее спасибо
Комментарии
Ни у кого не было такой ситуации?
Так у вас нет никакого условия. То есть переадресация происходит в любом случае. Поэтому она и циклическая.
Ну по сути подписчик срабатыает только один раз при загрузке и должна быть одна переадрисация.
"Условие" я написал для примера
например если я напишу в услвие if ( \Drupal::currentUser()->id() == 2), то на этом пользователи будет циклическая переадресация
Да, она срабатывает один раз за запрос. Юзера перекидывает на другой или тот же самый адрес и начинается новый запрос. А поскольку он новый, то переадресация срабатывает снова.
ААААА, понял теперь! А как же мне сделать, чтобы перекинуло на адрес и остановилось? Надо как то исключить страницу(роутер) на которую перекинуло. Или есть какой то другой вариант? если пишу exit; то страница не отрисовывается, return; - так же циклическая переадресация
Ну да надо исключить страницу, других вариантов не вижу. Спасибо тебе, что навел на решение. Вопрос закрыт!