基于文档:http://symfony.com/doc/2.8/form/dynamic_form_modific.html#form-events-submitted-data
我准备了动态生成表单。所有的工作都正常,但只有当我使用form添加新数据(/new)时,当我使用相同的form编辑现有数据时--不工作
class AppointmentType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name') ->add('client', EntityType::class, array( 'class' => 'SystemAdminBundle:Client', 'placeholder' => '', )); $formModifier = function(\Symfony\Component\Form\FormInterface $form, Client $client) { $diseases = array(); if($client !== null) { $diseases = $client->getDiseases(); } $form->add('disease', EntityType::class, array( 'class' => 'SystemAdminBundle:Disease', 'placeholder' => '', 'choices' => $diseases, )); }; $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formModifier) { $data = $event->getData(); $formModifier($event->getForm(), $data->getClient()); } ); $builder->get('client')->addEventListener( FormEvents::POST_SUBMIT, function (FormEvent $event) use ($formModifier) { $client = $event->getForm()->getData(); $formModifier($event->getForm()->getParent(), $client); } ); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'System\AdminBundle\Entity\Appointment' )); } }
public function newAction(Request $request) { $appointment = new Appointment(); $form = $this->createForm(AppointmentType::class, $appointment); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $data = $request->request->get('appointment'); if(array_key_exists('name', $data)) { $em = $this->getDoctrine()->getManager(); $em->persist($appointment); $em->flush(); return $this->redirectToRoute('appointment_show', array('id' => $appointment->getId())); } } return $this->render('appointment/new.html.twig', array( 'appointment' => $appointment, 'form' => $form->createView(), )); } public function editAction(Request $request, Appointment $appointment) { $deleteForm = $this->createDeleteForm($appointment); $appointment = new Appointment(); $editForm = $this->createForm('System\AdminBundle\Form\AppointmentType', $appointment); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { $data = $request->request->get('appointment'); if(array_key_exists('name', $data)) { $em = $this->getDoctrine()->getManager(); $em->persist($appointment); $em->flush(); return $this->redirectToRoute('appointment_show', array('id' => $appointment->getId())); } return $this->redirectToRoute('appointment_edit', array('id' => $appointment->getId())); } return $this->render('appointment/edit.html.twig', array( 'appointment' => $appointment, 'edit_form' => $editForm->createView(), 'delete_form' => $deleteForm->createView(), )); }
{% block content %} {{ form_start(form) }} {{ form_widget(form) }} {{ form_end(form) }} window.onload = function() { var $sport = $('#appointment_client'); $sport.change(function() { var $form = $(this).closest('form'); var data = {}; data[$sport.attr('name')] = $sport.val(); data['appointment[_token]'] = $('#appointment__token').val(); $.ajax({ url : $form.attr('action'), type: $form.attr('method'), data : data, success: function(html) { $('#appointment_disease').replaceWith( $(html).find('#appointment_disease') ); } }); }); }; {% endblock %}
{% block content %} {{ form_start(edit_form) }} {{ form_widget(edit_form) }} {{ form_end(edit_form) }} window.onload = function() { var $sport = $('#appointment_client'); $sport.change(function() { var $form = $(this).closest('form'); var data = {}; data[$sport.attr('name')] = $sport.val(); data['appointment[_token]'] = $('#appointment__token').val(); $.ajax({ url : $form.attr('action'), type: $form.attr('method'), data : data, success: function(html) { $('#appointment_disease').replaceWith( $(html).find('#appointment_disease') ); } }); }); }; {% endblock %}
您可以在EditAction
中创建新约会
,然后将其持久化。您应该使用函数参数中的一个,处理请求并刷新,因为您的对象已经持久化了。
因此删除这些行:
$appointment = new Appointment();
// ...
$em->persist($appointment);
本文向大家介绍使用Vue生成动态表单,包括了使用Vue生成动态表单的使用技巧和注意事项,需要的朋友参考一下 开需求会了,产品说这次需求的表单比较多,目前有18个,后期的表单可能会有增加、修改。我作为这次的前端开发,看到这样的需求,心里知道要这样搞不得把自己累死,首先表单居多,还会有变更,以后维护起来也让人心力憔悴。 于是我提议做动态表单,做一个表单的配置系统,在系统里配置表单类型、表单得字段、以及
上下文 我正在创建一个股票价格数据数据库。我目前正在使用下面的函数: 这允许在编辑单元格时对某些列执行编辑。到目前为止,它是有效的,但有一些扭结。 问题1 有时,当我编辑列的第四行上方的单元格时,它会编辑整个列,尽管我告诉它从第四行开始。这发生在几分钟前的一个单元格中,我告诉它排除上面的“I2”。我为此编写的代码有什么问题吗? 问题2我尝试为代码创建其他异常,其中对于某些指定的范围,它将仅从不同的
我在处理我的联系方式时遇到了麻烦,虽然是一个简单的联系方式。我花了很多时间试图找出我的代码出了什么问题,但一直没有找到解决办法。我的对象没有接收数据。我有以下例外情况: 执行INSERT INTO联系人(电子邮件、姓名、消息、日期)VALUES时发生异常 (?, ?, ?, ?)'用参数[null, null, null,"2016-09-19 00:08:48"]: SQLSTATE[23000
问题内容: 我已经做了一个不错的表格,并使用了一个复杂的“添加”函数来处理它。像这样开始 现在,我真的不想重复该方法中的所有功能,因此我想可以使用完全相同的模板,甚至可以id在表单中添加一个字段,以便该函数知道其正在编辑的内容。但这有几个问题 我将在哪里放置功能?之所以必须在此之后,是因为这是创建文章的地方,但它甚至永远都不会达到那个目的,因为由于唯一的约束,表单是无效的(除非用户编辑了所有内容)
问题内容: 我有一个Webapp,允许用户创建自己的字段,以供以后使用表单呈现。 我有一个像这样的Formfield模型: 我用来代表字段的类型,无论是哪种类型(复选框,输入,以后都会有更多)。 如你所见,每个字段都有一个form_id的FK。 我正在尝试为给定的form_id生成动态表单。问题是我需要确定要为每个Formfield呈现的字段的类型。因此,我还需要在某个时候处理字段类型。 我想一个
问题内容: 我想基于服务器的json响应生成html表单。在JSON响应中,将输入类型,输入标题所有必需的信息。它可以是checbox,单选按钮,texarea或任何其他输入。 是否有任何第三方工具来生成表格。 谢谢 。 问题答案: 尝试dhtmlx表单javascript库: http://www.dhtmlx.com/docs/products/dhtmlxForm/index.shtml 您