jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 不处理模态中的Symfony2形式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将表单从表单类渲染为基于模式的表单,然后根据按下的按钮执行不同的操作.表单的目的是编辑实体.

我以模态显示表单时,无论我按哪个按钮,它都不会处理它,但是当我在新选项卡中呈现表单时,所有操作都会正确执行.

奇怪的是,即使在我的代码中,现在禁用了将用户推回到完整资源列表的重定向,当我单击模式按钮时页面仍会刷新.

解:

我需要手动将表单操作添加到模式中的表单,以便调用正确的控制器操作进行处理.为了达到这个解决方案,没有太多的讨论,所以为了方便他人,我们在这里

{{ form_start(form,{'action': path('sfi_teacher_manage_resource',{ 'id': resource.id,'action': user_action })}) }}

我的表格类:

<?PHP
namespace SFI\MainBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class ManageresourceType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder,array $options)
  {
    $builder
      ->add('name','text',array(
        'required' => true,'attr' => array(
          'class' => 'form-control','placeholder' => 'resource name',),))
      ->add('type','choice','empty_value' => 'Choose a type','choices' => array('w' => 'Website','v' => 'Video','a' => 'Audio'),))
      ->add('link','placeholder' => 'Add a link',))
      ->add('description','textarea','attr' => array(
          'class' => 'textarea','style' => 'width: 100%; height: 200px; font-size: 14px; line-height: 18px; border: 1px solid #dddddd; padding: 10px;','placeholder' => 'Write a description...',))
      ->add('save','submit',array(
        'attr' => array(
          'class' => 'btn btn-success',))
      ->add('remove',array(
        'attr' => array(
          'class' => 'btn btn-danger',));

  }

  public function getName()
  {
    return 'modifyresource';
  }

  public function setDefaultOptions(OptionsResolverInterface $resolver)
  {
    $resolver->setDefaults(array(
      'data_class' => 'SFI\MainBundle\Entity\resource',));
  }
}

我采取此行动的路线:

sfi_teacher_manage_resource:
    path:     /teacher/resource/manage/{action}/{iD}
    defaults: { _controller: SFIMainBundle:Teacher:manageresource }

我的控制器动作:

public function manageresourceAction($id,$action,request $manage_request)
{
  $logger = $this->get('logger');

  $em = $this->getDoctrine()->getManager();

  $managedresource = $em->getRepository('SFIMainBundle:resource')->find($id);
  $logger->info('Started the manage action');

  $manageresourceForm = $this->createForm(new ManageresourceType(),$managedresourcE);
  $logger->info('Loaded managedresourcE into FormType.');

  $manageresourceForm->handlerequest($manage_request);

  if ($manageresourceForm->isValid())
  {

    $logger->info('Form was valid.');

    if ($manageresourceForm->get('save')->isClicked()) {
      $logger->info('Save was clicked,ediTing resource.');
      $managedresource->setStatus("1");
      $logger->info('Status set to approved.');
      $em->persist($managedresourcE);
      $logger->info('resource was persisted.');
    } elseif ($manageresourceForm->get('remove')->isClicked()) {
      $logger->info('Remove / Decline was clicked');
      $em->remove($managedresourcE);
      $logger->info('resource removed.');
    }

    $em->flush();
    $logger->info('Flushing...');
    $logger->info("RedirecTing to teacher's resources...");
    //return $this->redirect($this->generateUrl('sfi_teacher_resources'));
  }

  return $this->render('SFIMainBundle:Teacher:manageresource.html.twig',array(
    'user_action' => $action,'form' => $manageresourceForm->createView(),));
}

正如您所看到的,我不得不在某些控制台日志中进行烘焙,以确定操作何时停止工作.

如果我将表单作为新选项卡打开,一切都很好,但不是在模态中.有人向我建议,一些JavaScript可能会妨碍提交按钮正常工作,但我不知道从哪里开始调试.

如果您需要更多信息,请告诉我!

编辑1:根据要求,我包括我如何定义和创建模态.

在我的resources.html.twig上,正在加载资源列表,我有几个这样的链接,对于每个实体:

{% if r.status == "0" %}
  <a href="{{ path('sfi_teacher_manage_resource',{ 'id': r.id,'action': 'review' }) }}" data-target="#manageresource" data-toggle="modal" class="btn btn-info bold" id="review"><i class="fa fa-fw fa-check-circle"></i>Review</a>
{% elseif r.status == "1" %}
  <a href="{{ path('sfi_teacher_manage_resource','action': 'edit' }) }}" data-target="#manageresource" data-toggle="modal" class="btn btn-info" id="edit"><i class="fa fa-fw fa-edit"></i>Edit</a>
{% endif %}

模态本身是在同一个模板中预先构建的,因为Symfony在使用Bootstrap模式时需要这样做(之前我使用过模态un SF,这是我在加载数据时能够想到让它们工作的唯一@L_801_16@或表格形式):

<div class="modal fade" id="manageresource" tabindex="-1" role="dialog" aria-labelledby="Manage resource" aria-hidden="true">
 <div class="modal-dialog">
  <div class="modal-content">
   Loading...
  </div>
 </div>
</div>

一旦检索到对象并将其加载到表单中,modal-content就会被manageresources.html.twig的内容替换:

{{ form_start(form) }}
<div class="modal-header">
  <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
  <h4 class="modal-title" id="mymodalLabel">Manage resource</h4>
</div>
<div class="modal-body">
  {{ form_errors(form) }}
  <div class="form-group">
    {{ form_errors(form.Name) }}
    {{ form_widget(form.Name) }}
  </div>
  <div class="form-group">
    {{ form_errors(form.typE) }}
    {{ form_widget(form.typE) }}
  </div>
  <div class="form-group">
    {{ form_errors(form.link) }}
    {{ form_widget(form.link) }}
  </div>
    {{ form_errors(form.description) }}
    {{ form_widget(form.description) }}
</div>
<div class="modal-footer">
  <div class="pull-left">
    {% if user_action == "review" %}
    {{ form_widget(form.save,{ 'label': 'Approve' }) }}
  {{ form_widget(form.remove,{ 'label': 'Decline' }) }}
    {% elseif user_action == "edit" %}
    {{ form_widget(form.save,{ 'label': 'Save' }) }}
    {{ form_widget(form.remove,{ 'label': 'Remove' }) }}
    {% endif %}
  </div>
  <div class="pull-right">
    <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
  </div>
</div>
{{ form_end(form) }}

那将涵盖此操作中涉及的所有代码.

解决方法

感谢您发布模板代码,我会尽快仔细查看.
一个想法:我会尝试在manageresources.html.twig中明确设置表单的操作
尝试这样的事情(适应正确的参数):

{{ form_start(form,'action': user_action })}) }}

大佬总结

以上是大佬教程为你收集整理的jquery – 不处理模态中的Symfony2形式全部内容,希望文章能够帮你解决jquery – 不处理模态中的Symfony2形式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。