/**
* @Route("/installation", name="installation")
*/
public function defaultAction()
{
$this->checkPhpVersion();
return $this->redirect($this->generateUrl('setdatabase'));
}
private function checkPhpVersion()
{
if(phpversion() <= '5.5.0')
{
$message = 'aaa';
return $this->render('myFooBundle:Bar:error.html.twig', ['message' => $message]);
}
}
好吧,我希望checkPhpVersion()
方法中的if指令显示错误页面并停止以后的执行。
正在调用该指令,但似乎视图未正确呈现,因为我被重定向到setdatabase控制器(defaultAction()
的结尾),我不应该。
未显示error.html.twig的内容。相反,如上所述,调用setdatabase控制器并显示其方法的视图。
怎么了?
private function checkPhpVersion()
{
if(phpversion() <= '5.5.0')
{
echo 1;
exit();
echo 2;
$message = 'aaa';
return $this->render('myFooBundle:Bar:error.html.twig', ['message' => $message]);
}
}
这仍然没有改变。但是,删除重定向语句并将原始return array()
放在那里,删除exit()
,会显示“1”和“2”整数,并根据提到的return array()
显示一些错误。
答案 0 :(得分:1)
逻辑是错误的,因为你调用一个函数返回一个视图,然后从调用者继续进行重定向(因此两个动作都被触发)。
一种解决方案是调整您的checkPhpVersion()
功能,如下所示:
/**
* @Route("/installation", name="installation")
*/
public function defaultAction()
{
if (!is_null($message = $this->checkPhpVersion()))
return $this->render('myFooBundle:Bar:error.html.twig', ['message' => $message]);
else
return $this->redirect($this->generateUrl('setdatabase'));
}
private function checkPhpVersion()
{
return phpversion() <= '5.5.0' ? 'aaa' : null;
}
如果要将视图生成保留在checkPhpVersion()
函数中,可以使用:
/**
* @Route("/installation", name="installation")
*/
public function defaultAction()
{
if(!empty($this->checkPhpVersion()))
return new Response($content);
else
return $this->redirect($this->generateUrl('setdatabase'));
}
private function checkPhpVersion()
{
if(phpversion() <= '5.5.0')
{
$message = 'aaa';
return $this->renderView('myFooBundle:Bar:error.html.twig', ['message' => $message]);
}
}
请参阅:http://symfony.com/doc/current/book/controller.html#rendering-templates
答案 1 :(得分:0)
如果您尝试停止进一步执行,请在呈现错误页面后使用checkPhpVersion
方法中的PHP exit()
函数。