【发布时间】:2016-06-10 12:52:50
【问题描述】:
我的基本控制器的构造函数中请求了一项服务,以确保它始终运行。该服务会检查数据库中的一些内容,并且可能会出错。如果出错,我想将用户重定向到显示此错误的页面。我找不到任何方法来实现这一点,因为重定向只能从控制器的操作中返回。我想要的是能够从动作外部“返回”重定向。我需要做什么才能从我的服务重定向?我必须以不同的方式实现我的服务,还是根本不需要?我不想在每个操作上手动调用此方法。
相关代码:
// Every other controller in my bundle extends this one
class Controller extends SymfonyController
{
public function setContainer(ContainerInterface $container = null)
{
parent::setContainer($container);
$this->containerInitialized();
}
protected function containerInitialized()
{
// Initialize my.service before running action of every page
try {
$this->get('my.service');
} catch (SomeException $ex) {
// I want redirection to happen here
}
}
}
编辑:我知道我可以使用控制器内核事件在每个页面上运行某些东西,这就是我将要使用的。但这仍然不能解决重定向的情况。
【问题讨论】:
-
我会创建一个自定义
RedirectException,您可以将其放入您的服务中,并在控制器中捕获。自定义异常类应包含重定向的 url。 -
@jszobody 我将如何从控制器实际执行此重定向?那时我们还没有采取行动。
-
@jszobody 谢谢,我会试试的。如果您同时将此添加为答案,我会在检查是否可以正常工作后接受它。
-
@jszobody 真是个好主意!
标签: php redirect service symfony