redirectToRoute必须由控制器操作返回才能工作。例如:
function testAction() {
return $this->redirectToRoute('homepage');
}
但是如何在动作函数之外调用重定向(来自另一个函数)?像:
function checkError() {
$this->redirectToRoute('error');
}
答案 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
}