2017-01-08 31 views
0

我有實體類型類字段(下拉),從我的表中生成數據。我有表單子代理,用戶將爲該特定子代理選擇一家公司。從實體形式傳遞數據到控制器Symfony3

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 

    $builder->add('company_id', EntityType::class, array(
     'label' => 'Company', 
     'required' => true, 
     'class' => 'OnlyBundle\Entity\Company', 
     'choice_label' => 'name', // The Company Name 
     'choice_value' => 'id', // The Company ID (unique) to be inserted in DB 
     'expanded' => false, 
     'multiple' => false, 
     'placeholder' => 'Choose a Company', 
     'constraints' => array(
      new NotBlank(array("message" => 'Company name is required.')), 
     ),    
    )); 

該實體將生成如下所示的樹枝。

<select id="sub_agent_company_id" name="sub_agent[company_id]" required="required"> 
    <option value="" selected="selected">Choose a Company</option> 
    <option value="20">ABC</option> 
    <option value="21">EFG</option> 
<option value="22">HIJ</option> 
    </select> 

我想傳遞或下拉字段(20,21,22)的值設置到我的控制器,但問題是,下拉返回由我公司類的對象。我如何只傳遞下拉的值而不是整個控制器?

這是我的控制器。

public function createAction(Request $request) { 

     $sub_agent = new Sub_agent; 

     $form = $this->createForm(SubAgentType::class, $sub_agent, array(
      'action'=>$this->generateUrl('swipe_backend_sub_agent_create'), 
      'method'=>'POST' 
     )); 

     $form->handleRequest($request); 

     if ('POST' === $request->getMethod()) { 

      $data = $form->getData(); 

      $sub_agent_name = $data->getName(); 

      var_dump($data->getCompanyId()); exit; 

..../ 

回答

0

$data->getCompanyId()返回公司對象。如果你想只得到它的ID,而不是整個對象只需調用$data->getCompanyId()->getId()

0

你可以得到公司的id控制器,直接從與形式:

$id = $sub_agent->getId(); 

...假設你有一個吸您的Sub_agent實體類

public function getId(){ 
    return $this->id; 
} 

但您在這裏錯過了全部要點。當你使用Doctrine時,忘記「SQL的方式」,而是將整個問題視爲對象。

剛落,那if ('POST' === $request->getMethod()),而是添加:

if ($form->isSubmitted() && $form->isValid()) { 
... 
} 

用來檢查是否提交表單,如果它是有效的,根據自己的約束,在Sub_agent實體,建立(如有)。

而在這個檢查中,我已經告訴你添加,只需轉儲$sub_agent變量,看看裏面有什麼。不要忘記第一件事:在模板中您有相應的表單,添加一些您想要的數據,然後提交該表單,然後檢查控制器的轉儲。

//... 
if ($form->isSubmitted() && $form->isValid()) { 
    dump($sub_agent); die; 
} 

所以整個的一點是,你不必擔心,還是要儘量從形式上得到每一個人場,然後將它們映射到實體的屬性,才能夠保存表單數據庫中的數據。學說已經爲你做了。你所需要做的就是設置實體(屬性+ getters和setters),根據實體創建表單,然後添加我告訴過你的代碼。而已!夠簡單嗎?

+0

爲什麼主義在您將其傳遞給控制器​​時不立即捕獲選項的價值?因爲當我嘗試在數據庫中插入數據時,'company_id'獲得值'{}'而不是像[20,21,22] \ 這樣的選項的值,請參閱VALUES(?,?,?使用參數[{},{},「test」,「[email protected]」,「test」,「test」,null,「2017-01-09」?「,?,?,?,? 08:37:49「,」127.0.0.1「]:' – phpmeter

+0

@jlacsonph我想你有一些設置問題需要解決,然後再試圖獲取這些值。因爲我沒有你的項目,我真的不能告訴你爲什麼它不起作用。 –

相關問題