Symfony 3.1.3:触发并呈现isValid()错误后,表单提交按钮无响应(未禁用)

时间:2016-11-06 17:30:16

标签: php forms symfony

我创建了一个邀请新用户的表单。表单在提交和正确处理方面没有问题,直到isValid()方法在提交后返回错误。发生这种情况时,会正确地重新呈现页面,并显示相应的错误。不幸的是,提交按钮然后变得没有响应:它仍然是正确的样式(当通过jQuery禁用时样式更改,所以这似乎不是问题),正确的提交URL仍然出现在底部 - 导航器的左侧,但点击它时没有任何反应。

UserInviteType表单构建类:

class UserInviteType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('userBackground', ChoiceType::class, array(
                'choices'  => array(
                'Professeur' => 'professor',
                'Étudiant' => 'student',
                'Employé de laboratoire' => 'labEmployee',
                'Employé administratif' => 'adminEmployee',
                'Autre' => 'other'
                )))
            ->add('firstName',  TextType::class)
            ->add('lastName',   TextType::class)
            ->add('email',      EmailType::class)
            ->add('misc',       TextType::class, array( 
                'required' => false,
                ))
            ->add('level',      EntityType::class, array( 
                'required' => false,
                'class' => 'AspProfessorProfileBundle:Level',
                'choice_label' => 'value',
                'multiple' => false,
                ))
            ->add('canModify',                      CollectionType::class, array(
                'entry_type'                    =>  CanModifyInitType::class,
                'allow_add'                     =>  true,
                'allow_delete'                  =>  true,
                'prototype'                     =>  true,
                'required'                      =>  true,
                ))
            ->add('save',   SubmitType::class, array(
                'disabled' => 'false',
                ))

        ;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Asp\UserBundle\Entity\UserInvite',
            'validation_groups' => array(
                'Asp\UserBundle\Entity\UserInvite',
                'determineValidationGroups'
            ),
        ));
    }
}

处理页面呈现和表单提交的控制器:

public function usersAction(Request $request)
{

    $user = new UserInvite(); 
    $form = $this->get('form.factory')->create(UserInviteType::class, $user);

    /* retreive all users - for user list rendering*/
    $userManager = $this->get('fos_user.user_manager');
    $users = $userManager->findUsers();

    if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {

        $em = $this->getDoctrine()->getManager(); 
        $data = $form->getData();

        if ($data->getUserBackground() == 'professor' || $data->getUserBackground() == 'adminEmployee' || $data->getUserBackground() == 'other') {
            $canMod = $user->getCanModify();
            foreach ($canMod as $cM) { 
                $user->removeCanModify($cM);     
            }               
        }

        $em->persist($user); 
        $em->flush(); 
        $request->getSession()->getFlashBag()->add('notice', 'Invitation envoyé à '.$user->getFirstName().' '.$user->getLastName().'('.$user->getEmail().').'); 

        return $this->redirectToRoute('asp_core_admin_users');
    }

    return $this->render('AspCoreBundle:Admin:users.html.twig', array(
        'users' => $users, 
        'form' => $form->createView()
    ));
}

表格的Twig视图呈现:

<div class="user-init-form-container">
        {{ form_start(form, {'attr': {'class': 'form-horizontal'}}) }} 
        {{ form_errors(form) }}

        {# ....... Declare other form elements ....... #}

        <div class="form-group">
            <div class="col-sm-offset-3 col-sm-8 col-lg-offset-2 col-lg-9">
                {{ form_widget(form.save, { 'id': 'submit_button', 'label': 'Inviter', 'attr': {'class': 'btn btn-primary'}}) }}
            </div>
        </div>

        {{ form_end(form) }}

</div>

我没有直接与提交按钮进行任何jQuery交互(除非我想看到禁用的按钮样式以确认这不是问题)。

我已经看了很多,似乎无法在任何地方找到任何话题。希望你们中的一个人能够发现我做错了什么,因为我现在真的很难过!

谢谢。

Alex S.

2 个答案:

答案 0 :(得分:0)

尝试指定表单操作?

{{ form_start(form, {'attr': {'id': 'myId'}, 'action':  path('my_route')}) }}

其他方法,如果您更喜欢http://symfony.com/doc/current/form/action_method.html

答案 1 :(得分:0)

我想出来了。

这是由于隐藏字段在生成错误后未正确呈现。这个隐藏的领域突然变得必需,并且会阻止提交表格。

谢谢。

亚历