繁体   English   中英

Symfony2:CollectionType表单

[英]Symfony2 : CollectionType Forms

我为带有document(entity)的evenment实体创建了一个添加表单,因此我使用此链接https://symfony.com/doc/current/form/form_collections.html ,这是结果: 在此处输入图片说明 我的问题是如何从表单中删除文档ID?

EvenementType

 <?php namespace IcebergBundle\\Form; use Symfony\\Component\\Form\\AbstractType; use Symfony\\Component\\Form\\FormBuilderInterface; use Symfony\\Component\\OptionsResolver\\OptionsResolver; use Symfony\\Component\\Form\\Extension\\Core\\Type\\CollectionType; class EvenementType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('type', 'choice', array('label' => 'choisr le type', 'choices' => array('evenement' => 'Evenement', 'formation' => 'Formation'), 'choices_as_values' => false, )) ->add('titre','text', array('label' => 'Titre:', 'attr' => array('class' => 'form-control'))) ->add('description','text', array('label' => 'Descrption:', 'attr' => array('class' => 'form-control'))) ->add('datedebut', 'datetime', array('date_widget' => "single_text", 'time_widget' => "single_text",'label' => 'Date debut evenement:')) ->add('datefin', 'datetime', array('date_widget' => "single_text", 'time_widget' => "single_text",'label' => 'Date fin evenement:')) ->add('doc', CollectionType::class, array( 'label' => 'Document: ', 'entry_type' => DocumentType::class, 'allow_add' => true, 'allow_delete' => true, )) ->add('file','file',array('label' => 'Grande Image : ' )) ->add('file2','file',array('label' => 'Petite Image : ' )) ->getForm(); ; } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'IcebergBundle\\Entity\\Evenement' )); } } 

EvenementController

  public function newAction(Request $request) { $evenement = new Evenement(); $doc= new Document(); $evenement->addDoc($doc); $form = $this->createForm('IcebergBundle\\Form\\EvenementType', $evenement); $form->handleRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $doc->upload(); $evenement->upload(); $evenement->upload2(); $em->persist($evenement); $em->flush(); $this->get('session')->getFlashBag()->set( 'success', array( 'title' => 'Modification avec sucssés !', 'message' => 'Evenement ajouté .','type'=>'success' ) ); return $this->redirectToRoute('evenement_show', array('id' => $evenement->getId())); } return $this->render('evenement/new.html.twig', array( 'evenement' => $evenement, 'form' => $form->createView(), )); } 

new.html.twig

 {% extends 'base_back.html.twig' %} {% block body %} {% for type, flashMessage in app.session.flashbag.all() %} <div class="alert alert-{{ flashMessage.type }} fade in"> <button class="close" data-dismiss="alert" type="button">×</button> {% if flashMessage.title is defined %} <strong>{{ flashMessage.title }}</strong> {{ flashMessage.message }} {% else %} {{ type }} {% endif %} </div> {% endfor %} <h1>Ajouter Evenement/Formation</h1> {{ form_start(form) }} {{ form_widget(form) }} <input class="btn btn-primary" type="submit" value="Ajouter" /> <a class="btn btn-default" href="{{ path('evenement_index') }}">Retourner à la liste<i class="glyphicon glyphicon-eye-open"></i></a> {{ form_end(form) }} {% endblock %} {% block javascripts %} <script src="https://code.jquery.com/jquery.js"></script> {% endblock %} 

文件类型

 <?php namespace IcebergBundle\\Form; use Symfony\\Component\\Form\\AbstractType; use Symfony\\Component\\Form\\FormBuilderInterface; use Symfony\\Component\\OptionsResolver\\OptionsResolver; class DocumentType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('titre','text', array('label' => 'Titre:', 'attr' => array('class' => 'form-control'))) ->add('file') ->getForm(); ; } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'IcebergBundle\\Entity\\Document' )); } } 

可以尝试:

'label' => 'Document:  ',
'entry_type' => DocumentType::class,
'allow_add' => true,
'allow_delete' => true,
'entry_options'  => array( 'label' => false )

希望这个能对您有所帮助

如果在“ Evenement”表单中添加此行->add('doc', CollectionType::class, array(... ,则将显示文档ID。

现在,如果您想在表单中显示Document的titre属性而不是id ,则在Document Entity中添加__tostring()函数,如下所示

 public function __toString(){
        return $this->getTitre();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM