2017-09-28 11 views
1

EntityTypeから値を取得できません。私は最後のバージョン3.3.6を持っています。EntityTypeから値を取得するSymfony

class BuildType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array 
     $options) 
    { 
    $builder 
    ->add('title', TextType::class) 
    ->add('save', SubmitType::class, array('label' => 'Create Post')) 
    ->add('team', CollectionType::class, array(
     // each entry in the array will be an "email" field 
     'entry_type' => TeamType::class, 
     // these options are passed to each "email" type 
     'entry_options' => array(
      'attr'  => array('class' => 'form-control'), 
     ), 
     'label' => false, 
     'allow_add' => true, 
     'prototype' => true, 
     'mapped' => false 
    )); 
} 
} 

class TeamType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array 
     $options) 
    { 

    $builder 
    ->add('name', EntityType::class, array(
     'placeholder' => 'Choice a champ', 
     'required' => true, 
     'class' => 'AppBundle:Champions', 
     'query_builder' => function (EntityRepository $er) { 
      return $er->createQueryBuilder('c') 
      ->orderBy('c.name', 'ASC'); 
     }, 
     'choice_label' => 'name', 
     'choice_value' => 'id', 
     'attr' => array('class' => 'dropdown'), 
    )); 
} 

私はすべてを試してみましたが、私はTeamTypeの '名前' の値を取ることができません。投稿フォームの後、私は行う

foreach ($form["team"]->getData() as $value) { 
    'name' => $value['name'] 

しかし値は空です。私はダンプ要求を試して、値がそこにある場合。他の値は取得してデータベースに保存することができます。 EntityTypeのみができません。 誰か知っているのですか?

+0

?スニペットを提供できますか? –

+0

奇妙なことに、 'TeamType'には1つのフィールドだけが含まれている場合、なぜそれを別のフォームタイプに抽出しましたか? –

答えて

1

EntityType戻ります。モデルゲッター関数を使用する必要があります。

$form->get('name')->getData()->getId(); // getName() vs.. 

これも同様の例です。あなたは `$フォーム[ 'チーム']`にアクセスしようとしている

symfony how get selected data from select

+0

です。ありがとう!!!!!!!!!! – KILLERIX

1

ManyToOne関係を使用しているとします。 AJAXで

あなたが得るデータは、後に提出しようとしている場合、あなたはあなたのビューで、これが最初に行うことができます。

​​

あなたは今、jQueryの をAJAXするformDatadataのような引数を置く必要があり、サーバー側:

public function createTeamNow(Request $request) {// ajax 

    $teams = $request->request->get('team'); // getting array 

    if(!is_null($teams)) {// if user added team 
    foreach ($teams as $team) { 
     // dump($team); 

     //create an instance for each element, it does not replace a data with the above 
     $teamType = new TeamType(); 
     $teamName->setName($team); 
     $this->em->persist($teamType); 
    } 
    } 

} 

オブジェクトとしてAJAXなし

/** 
* @Route("/slim/1" , name="data_x") 
*/ 
public function slimExampleAction(Request $request) 
{ 

    $form = $this->createForm(TeamType::class); 

    $form->handleRequest($request); 

    if ($form->isSubmitted() /*&& $form->isValid()*/) { 
     // When you've ManyToOne relationship, that field returns ArrayCollection class, it has several method to get data on differents ways, iterate with it, for example toArray is one 
     $data = $form->getData(); 
     dump($data->getDescription()->toArray());die; 
    } 

    return $this->render('AppBundle:view.html.twig', array(
     'form' => $form->createView(), 
    )); 

} 
関連する問題