Symfony2 redirectToRoute没有返回

时间:2015-11-02 11:55:40

标签: php symfony

redirectToRoute必须由控制器操作返回才能工作。例如:

function testAction() {
    return $this->redirectToRoute('homepage');
}

但是如何在动作函数之外调用重定向(来自另一个函数)?像:

function checkError() {
    $this->redirectToRoute('error');
}

3 个答案:

答案 0 :(得分:2)

控制器必须返回Response。 (几乎)没有办法避免它。

您可以做的是在内部函数中使用异常,在控制器中捕获异常并从控制器返回响应。实施例

function testAction() {
    try {
        checkError();
    } catch(Exception $e) {
        return $this->redirectToRoute('error');
    }
    $this->redirectToRoute('success');
}

然后在你的checkError()函数中抛出异常。

function checkError() {
    throw new Exception();
}

这是一个基本案例。还有更多advanced ways to handle exceptions in Symfony2,还有more advanced ways of throwing exceptions

答案 1 :(得分:1)

总是需要返回redirectToRoute(),因为它实际上做的是向触发重定向的浏览器发送响应。如果没有从具有redirectToRoute()调用的方法返回任何内容,则重定向不会返回浏览器,也不会发生重定向。

答案 2 :(得分:0)

为什么不这样做:

public function testAction() {
    if (checkError()) {
        return $this->redirectToRoute('homepage');
    } else {
        // return normal response
    }
}

private function checkError() {
    //test something
    if ($error) return true; //I know I could just return $error
    return false;            //just making this clear
}