如果用户登录时检查他/她是否在数据库中填写了所有字段(用户字段),我想要做什么。
我可以检查他们何时登录这些字段然后重定向到个人资料视图,但是一旦他们在个人资料视图中他们仍然可以看到菜单,所以他们可以轻松地转到其他选项,因为他们已经登录我不能以这种方式再检查它。
所以我虽然可能使用控制器事件监听器我可以检查,所以我检查控制器是不同的accountController(有视图编辑配置文件),如果不同,我可以检查字段。
这种方法的问题出在accountController和其他控制器中,它们是twig {%render ....%},它再次触发控制器事件并给我无限调用。
哪种方法会更好?感谢
答案 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 ... %}