我正在使用我的个人项目
Symfony v4.2
与XAMPP
和Widows 10 Pro
为了不在URL中显示路由参数,我将它们保存在表中。 然后在控制器中,我检查会话中是否有变量(保留与路由参数相对应的UUID)。
如果我在会话中没有任何变量,则应将其重定向到该部分的起始页,该页的UUID和初始数据已在其中设置。
将重定向逻辑提取到助手服务。为了重定向到工作,复制了函数redirectToRoute
和redirect
我通过删除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');
}
}
}
在这种情况下,犯人有什么主意吗?
答案 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'));
}
}