2017-08-29 4 views
0

symfonyでフォームコレクションに問題があります。 私は3つのエンティティの記事、AdditionnalFile、AdditionnalInformationsymfonyフォームコレクションカスタムプロトタイプ

記事のエンティティを持っている

/** 
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category", inversedBy="articles") 
* @ORM\JoinColumn(nullable=false) 
* @Gedmo\Versioned 
*/ 
private $category; 

/** 
* @ORM\OneToMany(targetEntity="AppBundle\Entity\AdditionnalInformation", mappedBy="article", cascade={"persist", "remove"}) 
* @ORM\JoinColumn(nullable=true) 
*/ 
private $additionnalInformations; 

/** 
* @ORM\OneToMany(targetEntity="AppBundle\Entity\AdditionnalFile", mappedBy="article", cascade={"persist", "remove"}) 
* @ORM\JoinColumn(nullable=true) 
*/ 
private $additionnalFiles; 

AdditionnalInformationエンティティ

/** 
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Article", inversedBy="additionnalInformations") 
*/ 
private $article; 

/** 
* @ORM\ManyToMany(targetEntity="UserLdapBundle\Entity\Group", inversedBy="additionnalInformations") 
* @ORM\JoinColumn(nullable=false) 
* 
* @Assert\Count(
*  min = 1, 
*  max = 5, 
*  minMessage = "Il faut au minimum 1 groupe autorisé", 
*  maxMessage = "Il faut au maximum {{ limit }} groupe autorisé" 
*) 
*/ 
private $groups; 

/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var string 
* 
* @ORM\Column(name="title", type="string", length=255) 
* @Gedmo\Versioned 
* @Assert\Type(type="string") 
* @Assert\NotBlank() 
*/ 
private $title; 


/** 
* @var string 
* 
* @ORM\Column(name="text", type="text") 
* @Gedmo\Versioned 
* @Assert\Type(type="string") 
* @Assert\NotBlank() 
*/ 
private $text; 

それは重要ではありませんので、私は、私は、フォームを作成してい 最後の実体を与えることはありませんAdditionnalFileのタイプ

/** 
* @param FormBuilderInterface $builder 
* @param array    $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add(
      'title', 
      TextType::class, 
      array(
       'attr' => array(
        'placeholder' => 'Titre' 
       ), 
       'label' => 'Titre :' 
      ) 
     ) 
     ->add(
      'text', 
      TextareaType::class, 
      array(
       'attr' => array(
        'placeholder' => 'Texte' 
       ), 
       'label'  => 'Texte :' 
      ) 
     ) 
     ->add(
      'groups', 
      EntityType::class, 
      array(
       'attr'   => array(
        'placeholder' => 'Droits' 
       ), 
       'class'  => 'UserLdapBundle:Group', 
       'choice_label' => 'name', 
       'expanded'  => true, 
       'multiple'  => true, 
       'label'  => 'Accessible pour :' 
      ) 
     ); 
} 

/** 
* @param OptionsResolver $resolver 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => AdditionnalInformation::class, 
    )); 
} 

そして私は... :) どのようにカスタムIプロトタイプすることができますが、私のadditionnalInformationType

/** 
* @param FormBuilderInterface $builder 
* @param array    $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add(
      'title', 
      TextType::class, 
      array(
       'attr' => array(
        'placeholder' => 'Titre' 
       ), 
       'label' => 'Titre :' 
      ) 
     ) 
     ->add(
      'category', 
      EntityType::class, 
      array(
       'attr'   => array(
        'placeholder' => 'Catégorie' 
       ), 
       'class'  => 'AppBundle\Entity\Category', 
       'choice_value' => 'id', 
       'choice_label' => 'name', 
       'multiple'  => false, 
       'label'  => 'Catégorie :' 
      ) 
     ) 
     ->add(
      'text', 
      TextareaType::class, 
      array(
       'attr'  => array(
        'placeholder' => 'Texte', 
        'class'  => 'tinymce' 
       ), 
       'label' => 'Texte :', 
       'required' => false 
      ) 
     ) 
     ->add(
      'tags', 
      TextType::class, 
      array(
       'attr' => array(
        'placeholder' => 'Tags' 
       ), 
       'label' => 'Tags :' 
      ) 
     ) 
     ->add(
      'ticketNumber', 
      TextType::class, 
      array(
       'attr'  => array(
        'placeholder' => 'Numéro de ticket, 301, 302,' 
       ), 
       'label' => 'Numéro(s) de ticket :', 
       'required' => false 
      ) 
     ) 
     ->add(
      'groups', 
      EntityType::class, 
      array(
       'attr'   => array(
        'placeholder' => 'Droits' 
       ), 
       'class'  => 'UserLdapBundle:Group', 
       'choice_label' => 'name', 
       'expanded'  => true, 
       'multiple'  => true, 
       'label'  => 'Accessible pour :' 
      ) 
     ) 
     ->add(
      'additionnalInformations', 
      CollectionType::class, 
      array(
       'entry_type' => AdditionnalInformationType::class, 
       'allow_add' => true, 
       'label' => 'Information(s) additionnel(s) :', 
       'prototype' => true 
      ) 
     ) 
     ->add(
      'additionnalFiles', 
      CollectionType::class, 
      array(
       'entry_type' => AdditionnalFileType::class, 
       'allow_add' => true, 
       'label' => 'Fichier(s) :', 
       'prototype' => true 
      ) 
     ) 
     ->add(
      'save', 
      SubmitType::class, 
      array(
       'label' => 'Sauvegarder', 
       'attr' => array(
        'class' => 'btn-primary' 
       ) 
      ) 
     ); 

を「埋め込む」しかし、今、私はいくつかの質問があり、私の記事にformTypeを作成していますか?私はブートストラップパネルを使用して、内部にadditionalnalInformationフォームを入れたいと思う。 これを複製して他のAdditionnal情報を追加する これは可能ですか?

答えて

0

実際に私はこれを使用しています。

{% block _article_additionnalInformations_entry_row %} 
<br> 
<div class="panel panel-primary"> 
    <div class="panel-heading">Information supplémentaire <a href="#" class="btn btn-xs btn-danger pull-right"><span class="glyphicon glyphicon-remove confirmation-suppression"></span></a></div> 
    <div class="panel-body"> 
     <div class="row"> 
      <div class="col-lg-8"> 
       {{ form_row(form.title) }} 
       {{ form_row(form.text) }} 
      </div> 
      <div class="col-lg-4"> 
       {{ form_row(form.groups) }} 
      </div> 
     </div> 
    </div> 
</div> 

{%endblock%}

0

カスタムの小枝のテーマを作成してください。 this pageの詳細については、こちらをご覧ください。

あなたは(たとえばあなたがフォームをレンダリングする場合)テンプレートにこのコードを配置しようとすることができます:

{% form_theme form _self %} 

{% block _additionnalFiles_entry_widget %} 
    <tr> 
     <td>{{ form_widget(form.task) }}</td> 
     <td>{{ form_widget(form.dueDate) }}</td> 
    </tr> 
{% endblock %} 

はちょうどブロック名を使用してください。 how form fragment are namedを理解するか、テンプレート内の{{ dump(form) }}を調べることでそれを行うことができます。

0

こんにちはおかげであなたの答えのために、私はこのコードに

{% block _additionnalInformations_entry_row %} 
    <br> 
    <div class="panel panel-primary"> 
     <div class="panel-heading">Information supplémentaire <a href="#" class="btn btn-danger"><span class="glyphicon glyphicon-remove confirmation-suppression"></span></a></div> 
     <div class="panel-body"> 
      <div class="row"> 
       <div class="col-lg-8"> 
        {{ form_row(form.title) }} 
        {{ form_row(form.text) }} 
       </div> 
       <div class="col-lg-4"> 
        {{ form_row(form.groups) }} 
       </div> 
      </div> 
     </div> 
    </div> 

{% endblock %} 

を入れて、私は、行外のカスタムのために使用されるブロックを入れている

{% form_theme form _self %} 

しかし、何も変更:( を使用しようとする必要があり私はSF 3.2を使用しています。