帮助服务中的Symfony重定向不起作用

时间:2019-01-19 16:52:09

标签: php symfony redirect url-redirection symfony4

简介

我正在使用我的个人项目

  • Symfony v4.2
  • XAMPP
  • Widows 10 Pro

为了不在URL中显示路由参数,我将它们保存在表中。 然后在控制器中,我检查会话中是否有变量(保留与路由参数相对应的UUID)。

如果我在会话中没有任何变量,则应将其重定向到该部分的起始页,该页的UUID和初始数据已在其中设置。

将重定向逻辑提取到助手服务。为了重定向到工作,复制了函数redirectToRouteredirect

我通过删除temp文件夹中的php会话变量和浏览器中的PHPSESSID cookie来测试此功能。

问题

问题是-它不会重定向到secton起始页。

如果选择了分支,我可以看到正确的信息,但是它“只是停止了”并且不执行重定向。

代码

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 :(得分:1)

嗯,我想您的代码在服务中而不在您的控制器中? 您不能从服务重定向,而只能从控制器重定向,因为控制器发送最终响应。

您必须从服务中返回布尔值并从控制器中重定向:

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
}

答案 1 :(得分:1)

您可以尝试将路由器插入服务类:

use Symfony\Component\Routing\RouterInterface;

MyService类 {     私人$ router;

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

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

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

}