重定向到某个错误页面

时间:2013-05-24 15:35:02

标签: php symfony

/**
 * @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()显示一些错误。

2 个答案:

答案 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()函数。