Nib*_*orb 0 php symfony symfony-2.1
我的UserBundle中有一个ProfileType表单(从SonataUserBundle扩展),在ProfileType表单中,我添加了一个子表单类型(AddressType())。
ProfileType
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('gender')
->add('firstname')
->add('lastname')
->add('middlename')
->add('dateOfBirth', 'birthday', array('required' => false))
->add('phone')
->add('address', new AddressType(), array('required' => false));
;
}
/**
* {@inheritdoc}
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => $this->class,
'validation_groups' => array('Profile', 'Address'),
'cascade_validation' => true,
));
}
Run Code Online (Sandbox Code Playgroud)
地址类型
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('postalcode')
->add('houseNumber')
->add('houseNumberAddition')
->add('street')
->add('city')
->add('country')
;
}
Run Code Online (Sandbox Code Playgroud)
在edit_profile_html.twig中,我想知道在AddressType中是否存在任何错误。但是form.address.vars.errors不会返回AddressType中无效元素的数量。如果我专门检查错误在地址类型一个元素,它不会返回正确的计数。
因此:form.address.vars.errors.length为0,但form.address.postalcode.var.errors.length有效。但是我不想一一检查所有元素。
<fieldset {% if form.address.vars.errors|length>0 %} class="warning" {% endif %} >
<legend>{% trans %}vg.userbundle.form.address.legend{% endtrans %}</legend>
{{ form_rest(form.address) }}
</fieldset>
Run Code Online (Sandbox Code Playgroud)
edit_profile_html.twig
{% block subtitle %}{{ "title_user_account" | trans({}, 'SonataUserBundle') }} - {{ "title_user_edit_profile" | trans({}, 'SonataUserBundle') }}{% endblock %}
{% block content %}
{% block fos_user_content %}
<form novalidate action="{{ path('sonata_user_profile_edit') }}" method="POST">
<fieldset {% if form.vars.errors|length>0 %} class="warning" {% endif %} >
<legend>{% trans %}vg.userbundle.form.profile.legend{% endtrans %}</legend>
{{ form_row(form.gender) }}
{{ form_row(form.firstname) }}
{{ form_row(form.lastname) }}
{{ form_row(form.middlename) }}
{{ form_row(form.dateOfBirth) }}
{{ form_row(form.phone) }}
</fieldset>
<fieldset {% if form.address.vars.errors|length>0 %} class="warning" {% endif %} >
<legend>{% trans %}vg.userbundle.form.address.legend{% endtrans %}</legend>
{{ form_rest(form.address) }}
</fieldset>
<fieldset class="submit">
<ul>
<li><input type="submit" name="submit"
value="{{ 'sonata_user_submit'|trans({}, 'SonataUserBundle') }}"/></li>
</ul>
</fieldset>
</form>
{% endblock %}
{% endblock content %}
Run Code Online (Sandbox Code Playgroud)
那么,检索“嵌入式” FormType的无效元素数量的正确方法是什么?
您可以使用“有效”变量(我想这是您要执行的操作)检查表单及其所有元素是否有效(=没有错误):
<fieldset {% if not form.address.vars.valid %} class="warning" {% endif %} >
Run Code Online (Sandbox Code Playgroud)