[英]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.