2017-09-01 69 views
-3

所以我正在瀏覽表單事件https://symfony.com/doc/current/form/events.html的symfony官方文檔。Symfony Form Events

但我不能抓住概念,除了事件的簡單定義。我從中得到的是FormEvents::PRE_SET_DATA在調用setData()之前觸發,在調用setData()之後觸發FormEvents::POST_SET_DATA。並且在調用Form :: submit()之前,之中和之後觸發FormEvents::PRE_SUBMITFormEvents::SUBMIT & FormEvents::POST_SUBMIT。我也對模型,規範和視圖數據的使用感到困惑。

有人可以用一個工作示例演示所有五個事件嗎?

回答

0

您可以使用這些事件來有條件地修改表單。我不會給你所有事件的示範,但這裏是一個。我使用該事件來填充具體實體的實體類型。 (ProfileCategory類型擴展了EntityType)。

$builder->addEventListener(
     FormEvents::PRE_SET_DATA, 
     function (FormEvent $event) use ($user) { 
      $form = $event->getForm(); 

      $formOptions = array(
       'class'   => ProfileCategory::class, 
       'query_builder' => function (EntityRepository $er) use ($user) { 
        // build a custom query 
        $user_id = $user->getId(); 
        $qb = $er->createQueryBuilder('pc'); 
        $qb->andWhere($qb->expr()->eq('pc.user', $user_id)); 
        return $qb; 
       }, 
       'label' => 'Categorie', 
       'expanded' => false, 
       'attr' => [ 
        'class' => 'profile-list' 
       ], 
      ); 

      $form->add('profileCategory', EntityType::class, $formOptions); 
     } 
);