Перенаправление Symfony в службу поддержки не работает - PullRequest
0 голосов
/ 19 января 2019

Введение

Для моего личного проекта я использую

  • Symfony v4.2 с
  • XAMPP и
  • Widows 10 Pro

Чтобы не отображать параметры маршрута в URL, я сохраняю их в таблице. Затем в контроллере я проверяю, есть ли переменная (которая сохраняет UUID, соответствующий параметрам маршрута) в сеансе.

Если я не получаю переменную в сеансе, он должен перенаправить на стартовую страницу раздела, где устанавливаются UUID и исходные данные в таблице.

Логика перенаправления извлекается во вспомогательную службу. Для перенаправления на работу скопированы функции redirectToRoute и redirect

Я проверяю этот функционал, удаляя переменные сеанса php в папке temp и cookie PHPSESSID в браузере.

Проблема

Проблема в том, что она не перенаправляет на начальную страницу сектора.

Я вижу, что правильно, если выбрана ветка, но тогда она "просто останавливается" и не выполняет перенаправление.

код

public function checkWhereaboutsExist()
{
   $em = $this->entityManager;
   $repo_whereabouts = $em->getRepository(Whereabouts::class);

   $whereabouts = $this->session->get('whereabouts');
   if (($whereabouts === null) || ($whereabouts === ''))
   {
       $data = 'whereabouts === '.$whereabouts;
       dump($data);
       /*
       HERE IT STOPS
       */
       return $this->redirectToRoute('section_start');
   }
   else
   {
       $my_whereabouts = $repo_whereabouts->getWhereabouts($whereabouts);
       if (!$my_whereabouts)
       {
           return $this->redirectToRoute('section_start');
       }
   }
}

Вопрос

Есть ли у кого-нибудь идеи о том, кто является виновником в этом случае?

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Вы можете попробовать внедрить роутер в ваш класс обслуживания:

use Symfony\Component\Routing\RouterInterface;

класс MyService { частный маршрутизатор $;

public function __construct(RouterInterface $router)
{
    $this->router = $router;
}

public function checkWhereaboutsExist()
{
    // your code ...

    return new RedirectResponse($this->router->generate('section_start'));
}

}

0 голосов
/ 19 января 2019

Хммм, я полагаю, что ваш код находится в службе, а не в контроллере?Вы не можете перенаправить из службы, но только из контроллера, поскольку контроллер отправляет окончательный ответ.

Вы должны вернуть логическое значение из вашего сервиса и перенаправить с вашего контроллера:

public function hasToGoToStart()
{
   $em = $this->entityManager;
   $repo_whereabouts = $em->getRepository(Whereabouts::class);

   $whereabouts = $this->session->get('whereabouts');
   if (($whereabouts === null) || ($whereabouts === ''))
   {
       return true;
   }
   else
   {
       $my_whereabouts = $repo_whereabouts->getWhereabouts($whereabouts);
       if (!$my_whereabouts)
       {
           return true;
       }
   }

   return false;
}

и в вашем контроллере:

if ($myService->hasToGoToStart()) {
    // redirect
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...