【问题标题】:Symfony 3 - modify form after getFormSymfony 3 - 在 getForm 之后修改表单
【发布时间】:2016-12-17 18:51:00
【问题描述】:

我设置了一个表单生成器来创建用户信息表单:

$form = $this->createFormBuilder($userSettings)
            ->add('newName', TextType::class, array(
                'required' => false,
                'label' => "Change UserName",
                 'attr' => array(
                        'placeholder' => $userData[0]->getUsername()
                    )
            ))
            ->add('newMail', TextType::class, array(
                'required' => false,
                'label' => "Change Email",
                'attr' => array(
                    'placeholder' => $userData[0]->getEmail()
                )
            ))
            ->add('newPassword', PasswordType::class, array(
                'required' => false,
                'label' => "Change Password"
            ))
            ->add('currentPassword', PasswordType::class, array(
                'label' => "Current Password"
            ))
            ->add('save', SubmitType::class, array('label' => 'Update Information!'))
            ->getForm();

现在提交表单后,我有一个处理程序来检查邮件或用户名是否尚未被占用

// Check if name or mail not occupied
                if($user_manager->findUserByEmail($mail)){

                }
                elseif($user_manager->findUserByUsername($name)){

                }

我的目标是,在邮件/用户名被占用时再次打印表单,只是这一次,占用的值会有一个占位符,说 “THIS VALUE IS OCCUPIED”

现在我尝试在 if 语句中添加另一个“添加”,例如

        $form->add('newMail', TextType::class, array(
            'required' => false,
            'label' => "Change Email",
            'attr' => array(
                'placeholder' => "EMAIL TAKEN"
            )
        ));

不幸的是,这给我一个错误提示

您不能将子级添加到提交的表单中

现在这是我的问题: 有没有好的和正确的方法呢?


B 端:

我可以像 ie 一样触发浏览器默认验证吗?在 chrome 中,如果需要输入并且您没有将内容放在那里,该框会变成红色,并且您会收到一条错误消息。

我想知道我是否可以在这里做同样的事情,所以对于这个项目,在这种情况下,我会得到一个红色的输入框,上面有警告“电子邮件已被接收”或类似的东西

【问题讨论】:

    标签: php forms validation symfony


    【解决方案1】:

    也许是这样的?

    $form = $this->createFormBuilder($userSettings)
    ->add('newName', TextType::class, array(
        'required' => false,
        'label' => "Change UserName",
        'attr' => array(
            'placeholder' => $userData[0]->getUsername()
        )
    ))
    ->add('newMail', TextType::class, array(
        'required' => false,
        'label' => "Change Email",
        'attr' => array(
            'placeholder' => $userData[0]->getEmail()
        )
    ))
    ->add('newPassword', PasswordType::class, array(
        'required' => false,
        'label' => "Change Password"
    ))
    ->add('currentPassword', PasswordType::class, array(
        'label' => "Current Password"
    ))
    ->add('save', SubmitType::class, array('label' => 'Update Information!'));
    
    if(isset($mail)  && $user_manager->findUserByEmail($mail)){
        $form->remove('newMail')
            ->add('newMail', TextType::class, array(
            'required' => false,
            'label' => "Change Email",
            'attr' => array(
                'placeholder' => 'EMAIL TAKEN'
            )
        ));
    }
    elseif(isset($name)  && $user_manager->findUserByUsername($name)){
        // just duplicate the above
    }
    
    $form->getForm();
    

    【讨论】:

    • 此选项不起作用,因为要从我注意处理它的表单中获取信息。你的方式给了我一个Attempted to call an undefined method named "handleRequest" of class "Symfony\Component\Form\FormBuilder".
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2017-02-19
    • 2019-03-10
    • 1970-01-01
    • 2021-02-05
    相关资源
    最近更新 更多