2013-02-27 2 views
0

Что я хочу сделать, если при регистрации пользователя проверить, имеет ли он все поля (поля пользователя) в базе данных.Проверка полей базы данных по каждому запросу Symfony2

Я могу проверить, когда они регистрируют эти поля, а затем перенаправляются на просмотр профиля, но как только они находятся в режиме просмотра профиля, они все еще могут видеть меню, поэтому они могут легко перейти к другим параметрам, и поскольку они уже регистрируются, я таким образом, невозможно проверить его.

Так что, хотя, возможно, с помощью контроллера Event Listener я могу проверить это, поэтому я проверяю, что контроллер отличается от accountController (у которого есть вид для редактирования профиля), и если он отличается, я могу проверить поля.

Проблема с этим подходом находится в accountController, а в другом контроллере это twig {% render ....%}, который снова запускает событие контроллера и дает мне бесконечные вызовы.

Какой подход лучше? Спасибо

ответ

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 ... %}

+0

Спасибо, Ваше идея помогает мне и с некоторым дополнительным кодом, который он работает –

Смежные вопросы