2017-01-08 16 views
0

私のテーブルの1つからデータを生成するエンティティタイプのクラスフィールド(ドロップダウン)があります。私はユーザーがその特定のサブエージェントのための会社を選択するフォームサブエージェントを持っています。エンティティフォームからコントローラにデータを渡す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()返品会社のオブジェクトです。あなたはあなたが得ることができるだけで$data->getCompanyId()->getId()

0

を呼び出す代わりに、オブジェクト全体のそのIDを取得するだけしたい場合は、同社のidコントローラでは、直接のフォームから:

$id = $sub_agent->getId(); 

...あなたがゲッターでを持っていると仮定あなたのSub_agentエンティティクラス

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

ここでは、すべての点が欠落しています。 Doctrineを使って作業するときは、「SQLの方法」を忘れて、その代わりに問題全体をオブジェクトと見なしてください。

ちょうど if ('POST' === $request->getMethod())、代わりに追加することをドロップ:

フォームが提出されたかどうかを確認し、それが有効かどうあれば、あなたの制約に従って、 Sub_agentエンティティに設定
if ($form->isSubmitted() && $form->isValid()) { 
... 
} 

このチェックでは、追加するように指示しました。$sub_agent変数をダンプして、内部の内容を確認します。最初のことを忘れないでください:テンプレートには、対応するフォームがあり、必要なデータを追加し、そのフォームを送信してから、コントローラからダンプをチェックしてください。

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

だから全体のポイントは、あなたが心配する、またはフォームから、個々のフィールドを取得しようとするし、フォームを保存できるようにするには、エンティティのプロパティにマップする必要がないということですデータベース内のデータ。 Doctrineはすでにあなたのためにそれをやっています。エンティティ(プロパティ+ getterとsetter)を設定し、そのエンティティに基づいてフォームを作成し、次にあなたに言ったコードを追加するだけです。それでおしまい!十分に簡単ですか?

+0

なぜ、doctrineは、コントローラに渡すとすぐにオプションの値をキャッチしませんか?データベースにデータを挿入しようとすると、 'company_id'は(20,21,22)\ のようなオプションの値の代わりに' {} 'の値を取得するので、' VALUES(?、?、?、 params [{}、{}、 "test"、 "[email protected]"、 "test"、 "test"、null、 "2017-01-09の場合は?、?、?、?、 "08:37:49"、 "127.0.0.1"]: ' – phpmeter

+0

@jlacsonph私はあなたがそれらの値を取得しようとする前に、解決する必要がいくつかのセットアップ問題があると思います。私はあなたのプロジェクトを持っていないので、なぜそれがうまくいかないのかは分かりません。 –

関連する問題