检查每个请求Symfony2上的数据库字段

时间:2013-02-27 21:30:39

标签: symfony

如果用户登录时检查他/她是否在数据库中填写了所有字段(用户字段),我想要做什么。

我可以检查他们何时登录这些字段然后重定向到个人资料视图,但是一旦他们在个人资料视图中他们仍然可以看到菜单,所以他们可以轻松地转到其他选项,因为他们已经登录我不能以这种方式再检查它。

所以我虽然可能使用控制器事件监听器我可以检查,所以我检查控制器是不同的accountController(有视图编辑配置文件),如果不同,我可以检查字段。

这种方法的问题出在accountController和其他控制器中,它们是twig {%render ....%},它再次触发控制器事件并给我无限调用。

哪种方法会更好?感谢

1 个答案:

答案 0 :(得分:2)

您使用控制器事件(kernel.controller)检查字段的想法是正确的。在事件处理程序中,您只需要检查请求是否是主请求...

use Symfony\Component\HttpKernel\HttpKernel;

class FieldUpdater
{
    /**
     * Updates user's fields
     *
     * @param \Symfony\Component\HttpKernel\Event\FilterControllerEvent $event
     *
     * @return void
     */
     public function onCoreController(FilterControllerEvent $event)
     {
         //if this isn't the main http request, then we aren't interested...
         if (HttpKernel::MASTER_REQUEST !== $event->getRequestType()) {
             return;
         }

         // update fields
      }
 }

通过这种方式,您不会在每次调用{% render ... %}

时触发此操作