2017-04-05 37 views
1

如何在Symfony中的表單構建器中獲取字段值。 我有2個下拉框的形式 我想在Dropdown2的時候在頁面打開的時候根據Dropdown1來選擇相關的選項。如何在Symfony中的表單構建器中獲取字段值

這裏是我的形式

use Symfony\Component\Form\FormEvents; 
use Symfony\Component\Form\Event\DataEvent; 
use C2Educate\ToolsBundle\Entity\Students; 
public function buildForm(FormBuilder $builder, array $options) { 

字段1:

$builder->add('leadSource', 'entity', array( 
     'label' => 'How did you hear about C2? Source ', 

     'class' => 'C2EducateToolsBundle:LeadSources', 
     'query_builder' => function($repo) { 
      return $repo->createQueryBuilder('p')->orderBy('p.sort_order', 'ASC'); 
     }, 
     'property' => 'name', 
     'empty_value' => 'Select' 

    )); 
$leadSource = 1; 

$leadSource = 1; - 當我靜態分配值它的工作原理,但我想要得到的「leadSource」的值,並將其分配給$leadSource

我想獲得leadSource並將其傳遞給leadSourceSub查詢

字段2:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) { 
    $form = $event->getForm(); 
    $entity = $event->getData(); 
    $leadSource = $entity->getLeadSourceID(); 
    $form->add('leadSourceSub', 'C2Educate\ToolsBundle\Entity\Students', array(
      'label' => ' Source Detail ', 
      'required' => true, 
      'class' => 'C2EducateToolsBundle:LeadSourceSubs', 
      'query_builder' => function($repo) use ($leadSource) { 
       return $repo->createQueryBuilder('p') 
         ->where('p.lead_source_id =:leadSource') 
         ->setParameter('leadSource', $leadSource) 
         ->orderBy('p.sort_order', 'ASC'); 
      }, 
      'property' => 'name', 
      'empty_value' => 'Select' 
     )); 
    }); 

回答

3

不能從$builder獲取表單數據,因爲...這是一個形式建設者,而不是形式。它尚未包含任何數據。

爲了使這項工作,你需要使用FormEvents。在這種情況下,您可能需要FormEvents::PRE_SET_DATA事件偵聽器。

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { 
     $form = $event->getForm(); 
     // in your case it's C2EducateToolsBundle:LeadSourceSubs 
     $entity = $event->getData(); 
     $leadSource = $entity->getLeadSource(); 

     // adding this field again will override it. 
     $form->add('leadSourceSub', 'entity', array(
       'label' => ' Source Detail ', 
       'required' => true, 
       'class' => 'C2EducateToolsBundle:LeadSourceSubs', 
       'query_builder' => function($repo) use ($leadSource) { 
        return $repo->createQueryBuilder('p') 
          ->where('p.lead_source_id =:leadSource') 
          ->setParameter('leadSource', $leadSource) 
          ->orderBy('p.sort_order', 'ASC'); 
       }, 
       'property' => 'name', 
       'empty_value' => 'Select' 
      )); 
     } 
    }); 

請注意,這個代碼不進行測試,可能需要一些驗證要檢查是否$entity是你希望它是在任何情況下什麼。

+0

是我試圖從相同的[動態生成的表單提交(https://symfony.com/doc/current/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms)。我正在一個Error'Catchable致命錯誤:傳遞給C2Educate \ ToolsBundle \表格\類型參數1 \ StudentsType :: C2Educate \ ToolsBundle \表格\型號\ {閉合}()必須C2Educate \ ToolsBundle \表格\型號\ FormEvent,實例的一個實例Symfony的\分量\表格\事件\ DataEvent給出在C:\ XAMPP \ htdocs中\ c2Education的\ src \ C2Educate \ ToolsBundle \表格\型號\ StudentsType.php線121' – Developer

+0

你可能只是複製代碼,忘了導入命名空間。 '使用的Symfony \分量\表格\ FormEvent;' –

+0

看來你很老的Symfony,所以可能需要使用'的Symfony \分量\表格\事件\ DataEvent',而不是一個在上面,修改封閉期待'DateEvent'代替'FormEvent'。 –

相關問題