Symfony检查非存在字段的验证

时间:2015-03-27 05:02:31

标签: forms symfony

这是我的表格

class CandidateType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstName')
            ->add('lastName')
            ->add('dob')
            ->add('user', new CandidateUserType());
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Candidate',
            'cascade_validation' => true,
        ));
    }

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

在我的第一个屏幕系统中,只获取first_name的姓氏和用户详细信息。我需要在第二个屏幕中使用此表单。但我不需要在该视图中显示名字和姓氏字段。我真的只需要表演出生日。

所以我这样展示我的表格。

{{ form_start(form, {'attr': {'id': 'candidate_form', 'class': 'form-horizontal'}}) }}

        {{ form_errors(form) }}

        <div class="row">
            <div class="form-group">
                <label>DOB</label>
                {{ form_widget(form.dob, {'attr': {'class': 'form-control'}}) }}
                {{ form_errors(form.dob) }}
            </div>
            <div class="col-sm-12 col-xs-12">
                <button type="submit" class="btn btn-primary btn-lg pull-right">
                    COMPLETE
                </button>
            </div>
        </div>

        {{ form_row(form._token) }}
    {{ form_end(form, {'render_rest': false}) }}

我使用render_rest来显示不需要的字段。但系统也检查firstName,lastName和user字段的验证。

我使用过验证组。但它会覆盖当前值并将这些字段保存为空白。

这个问题可能重复。这样做的正确方法是什么?我应该为候选人的show dob实施另一种形式吗?

1 个答案:

答案 0 :(得分:1)

您可以添加要传递给formtype的参数,并且:

private $show_fl;

public function __construct($show_fl = true){
    $this->show_fl = $show_fl;
}
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if($show_fl) {
             $builder
                ->add('firstName')
                ->add('lastName');
        }
        $builder->add('dob')
            ->add('user', new CandidateUserType());
    }

或使用其他表格类型。

您也可以在不使用构造的情况下使用buildForm的$ options。