我正在制作一款#34;浏览器游戏"在Symfony2中(像RPG一样)。在你开始战斗的那一刻,在战斗结束之前你无法做任何其他事情。
我需要检查,当用户的状态为"在战斗中#34;无论他想要到达哪个网址,都会重定向到"战斗页面"。
我尝试使用EventListener到Kernel.Request,并在每次该用户具有BATTLE状态并且不在Battle Page重定向时检查。这不能很好地工作,因为我有很多请求和我必须排除的事情,如DebuggerToolbar等。
有一个正确的方法吗?也许特别添加一个特殊的角色/权限?检查每个控制器?在行动?
我确定这是一个很好的方法,但我不知道如何寻找它。
谢谢!
答案 0 :(得分:1)
您可以通过侦听kernel.controller
事件来执行此操作,并在不满足条件时抛出错误以执行具有特定异常的控制器。
创建一个异常监听器,在拦截该特定异常时执行重定向。
您可以在此处阅读的机制的非常好的描述:http://php-and-symfony.matthiasnoback.nl/2012/12/prevent-controller-execution-with-annotations-and-return-a-custom-response/