Php Symfony2-表单正在尝试验证未使用的字段

Php Symfony2-表单正在尝试验证未使用的字段,php,symfony,Php,Symfony,因此,我有一个表单,允许用户更新他们的个人资料详细信息(姓名、电子邮件等) 表单使用指向用户实体的表单类型(UserType)正确显示。UserType使用用户名、电子邮件构建表单,然后扩展到ProfileType——另一种表单类型,包括他们的真实姓名、地址等 正如我提到的,表单正确地显示在页面上 现在,在我的validation.yml文件中,我指向用户和配置文件实体,对于用户,我定义了3个验证规则,分别是用户名、电子邮件和密码。对于Profile,我定义了名称和公司名称的规则。所有规则都不为

因此,我有一个表单,允许用户更新他们的个人资料详细信息(姓名、电子邮件等)

表单使用指向用户实体的表单类型(UserType)正确显示。UserType使用用户名、电子邮件构建表单,然后扩展到ProfileType——另一种表单类型,包括他们的真实姓名、地址等

正如我提到的,表单正确地显示在页面上

现在,在我的validation.yml文件中,我指向用户和配置文件实体,对于用户,我定义了3个验证规则,分别是用户名、电子邮件和密码。对于Profile,我定义了名称和公司名称的规则。所有规则都不为空,电子邮件也会进行检查以确保其有效,并且密码定义了最大和最小长度

现在,密码规则是最近添加的。以前,这个表单工作得很好,没有问题

在中添加密码规则时,当提交表单时,它会尝试根据此验证规则进行检查,但页面上没有呈现密码字段,甚至表单类型UserType中也没有提及密码字段

当然,如果我不使用输入,它不应该根据验证规则检查输入

代码如下:

Validation.yml

DEMO\DemoBundle\Entity\User\Profile:
properties:
    name:
        - NotBlank: ~
    pubName:
        - NotBlank: ~

DEMO\DemoBundle\Entity\User\User:
    properties:
        username:
            - NotBlank:
                message: Username cannot be blank.
        email:
            - NotBlank: ~
            - Email:
                message: The email "{{ value }}" is not a valid email.
                checkMX: true
        password:
            - MaxLength: { limit: 20, message: "Your password must not exceed {{ limit }} characters." }
            - MinLength: { limit: 4, message: "Your password must have at least {{ limit }} characters." }
            - NotBlank: ~
UserType.php

namespace DEMO\DemoBundle\Form\Type\User;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\CallbackValidator;

use DEMO\DemoBundle\Form\Type\User\ProfileType;

class UserType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('username');
        $builder->add('email');
        $builder->add('profile', new ProfileType());
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'DEMO\DemoBundle\Entity\User\User',
        );
    }

    public function getName()
    {
        return 'user';
    }
}
ProfileType.php

namespace DEMO\DemoBundle\Form\Type\User;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\CallbackValidator;

class ProfileType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('name');
        $builder->add('companyName', null, array('label' => 'Company Name'));
        $builder->add('address1', null, array('label' => 'Address 1'));
        $builder->add('address2', null, array('label' => 'Address 2'));
        $builder->add('city');
        $builder->add('county');
        $builder->add('postcode');
        $builder->add('telephone');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'DEMO\DemoBundle\Entity\User\Profile',
        );
    }

    public function getName()
    {
        return 'profile';
    }
}
DashboardController.php

public function profileAction(Request $request)
    {

        $user = $this->get('security.context')->getToken()->getUser();

        $form = $this->createForm(new UserType(), $user);

        if ($request->getMethod() == 'POST') {
            $form->bindRequest($request);

            if ($form->isValid()) {
                // Get $_POST data and submit to DB
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($user);
                $em->flush();

                // Set "success" flash notification
                $this->get('session')->setFlash('success', 'Profile saved.');
            }

        }

        $breadcrumbs = $this->get("white_october_breadcrumbs");
        $breadcrumbs->addItem("Home", $this->get("router")->generate("shop"));
        $breadcrumbs->addItem("My Account", $this->get("router")->generate("shop"));
        $breadcrumbs->addItem("My Profile", $this->get("router")->generate("shop"));

        return $this->render('DEMODemoBundle:User\Dashboard:profile.html.twig', array('form' => $form->createView()));
    }
profile.html.twig

<div class="container">
    <div class="row">
        <div class="span12">
            {% form_theme form 'DEMODemoBundle:User\\Form:fields.html.twig' %}

            {{ form_errors(form) }}

            <form action="{{ path('tk_update_profile') }}" class="form-horizontal" method="post" {{ form_enctype(form) }} novalidate="novalidate">
                <fieldset>
                    <legend>Your Details</legend>
                    {{ form_row(form.username) }}
                    {{ form_row(form.profile.name) }}
                    {{ form_row(form.email) }}
                </fieldset>
                <fieldset>
                    <legend>Company Details</legend>
                    {{ form_row(form.profile.companyName) }}
                    {{ form_row(form.profile.address1) }}
                    {{ form_row(form.profile.address2) }}
                    {{ form_row(form.profile.city) }}
                    {{ form_row(form.profile.county) }}
                    {{ form_row(form.profile.postcode) }}
                    {{ form_row(form.profile.telephone) }}
                </fieldset>
                <fieldset>
                    <div class="form-actions">
                        {{ form_rest(form) }}
                        <input class="btn-primary" type="submit" value="Save" />
                        <input class="btn-warning" type="reset" value="Reset">
                    </div>
                </fieldset>
            </form>
        </div>
    </div>
</div>

{%form\u主题表单'demobundle:User\\form:fields.html.twig%}
{{form_errors(form)}}
你的细节
{{form_行(form.username)}
{{form_行(form.profile.name)}
{{form_row(form.email)}
公司详情
{{form_行(form.profile.companyName)}
{{form_行(form.profile.address1)}
{{form_row(form.profile.address2)}
{{form_row(form.profile.city)}
{{form_row(form.profile.country)}
{{form_行(form.profile.postcode)}
{{form_row(form.profile.telephone)}
{{form_rest(form)}

在用户实体支持下填写表单时,系统将尝试创建新的用户对象,并验证属于该实体的所有规则。
您需要的是验证组,在这里您基本上说‘只需检查在执行“编辑”操作时应用的约束’

您可以在这里查看: