- class UserType
- {
- public function buildForm(FormBuilderInterface $builder,array $options)
- {
- $builder->add('email','email',['label' => 'EMail']);
- // varIoUs other fields....
- }
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'validation_groups' => array('registration'),'data_class' => 'Vendor\Model\Entity\User',));
- }
- public function getName()
- {
- return 'form_user';
- }
- }
TutorType表格:
- class TutorType extends Translate
- {
- public function buildForm(FormBuilderInterface $builder,array $options)
- {
- $builder->add('user',new UserType(),['label' => false]);
- $builder->add('school','entity',[
- 'class' => 'Model:School','property' => 'name','label' => 'Label'
- ]);
- // VarIoUs other fields
- $builder->add('save','Submit');
- }
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- //'validation_groups' => array('registration'),'data_class' => 'Vendor\Model\Entity\Tutor','cascade_validation' => true,));
- }
- public function getName()
- {
- return 'form_tutor';
- }
- }
渲染时,UserType在div中呈现,我无法找到克服这个问题的方法.
表格呈现为
- <form name="form_tutor"
- method="post"
- action=""
- novalidate="novalidate"
- class="form-horizontal form-horizontal"
- id="form_tutor">
- <div id="form_tutor"
- novalidate="novalidate"
- class="form-horizontal">
- <div class="form-group">
- <div class="col-lg-10">
- <div id="form_tutor_user">
- <div class="form-group">
- <label class="col-lg-2 control-label aaaa required"
- for="form_tutor_user_email">EMail</label>
- <div class="col-lg-10">
- <input type="email"
- id="form_tutor_user_email"
- name="form_tutor[user][email]"
- required="required"
- class="form-control" />
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="form-group">
- <label class="col-lg-2 control-label aaaa required"
- for="form_tutor_tutorType">Type</label>
- <div class="col-lg-10">
- <select id="form_tutor_tutorType"
- name="form_tutor[tutorType]"
- class="form-control">
- </select>
- </div>
- </div>
- <div class="form-group">
- <div class="col-lg-offset-2 col-lg-10">
- <button type="submit"
- id="form_tutor_save"
- name="form_tutor[save]"
- class="btn btn-default">Speichern</button>
- </div>
- </div><input type="hidden"
- id="form_tutor__token"
- name="form_tutor[_token]"
- class="form-control"
- value="s6i6zPxJs7KU5CiEe8i6Ahg_ca8rc2t5CnSk5yAsUhk" />
- </div>
- </form>
form_tutor_user包含在自己的表单组div中.
我试图覆盖form_tutor_user_widget,但这是一个很深的层次. (只有快速修复,它应全局应用于所有表单类型 – 类)
如何更改主题,以便所有自定义类型都不使用默认的form_row模板包装?
或者在呈现“子表单”时如何知道?
所以我可以决定打印< div class =“form-group”>当子节点不是子表单时,或者跳过它,如果是这种情况.
TIA
解决方法
- {% block form_row %}
- {% spaceless %}
- <div>
- {{ form_label(form) }}
- {{ form_errors(form) }}
- {{ form_widget(form) }}
- </div>
- {% endspaceless %}
- {% endblock form_row %}
并且,对于自定义复合形式:
- {% block form_widget_compound %}
- {% spaceless %}
- <div {{ block('widget_container_attributes') }}>
- {% if form.parent is empty %}
- {{ form_errors(form) }}
- {% endif %}
- {{ block('form_rows') }}
- {{ form_rest(form) }}
- </div>
- {% endspaceless %}
- {% endblock form_widget_compound %}
除非你在这里改变了一些东西,否则你看到的DIV应该来自模板的一个或另一个.
但是,在您的特定示例中,如果定义了form_tutor_user_row,则从不使用第一个位,如果定义了form_tutor_user_widget,则永远不会使用最后一位.
回到你的问题.你的问题是:
“我如何更改主题,以便所有自定义类型都不会使用默认的form_row模板包装?”
这是我看到它的方式的问题:你希望你的TOP表单(包含所有子表单的表单)都有一个共同的渲染方式,分段.每个部分都将包含在DIV中,其中class =“form-group”.您可能想要进行一些额外的渲染操作,但我将自己限制在此以保持简单.
您需要做的是创建一个特定的表单类型,并使所有的TOP表单继承自这种新的表单类型.例如:
- class TopType extends AbstractType
- {
- public function getName()
- {
- return 'top_form';
- }
- }
……和一个继承的形式:
- class MyFormType extends AbstractType
- {
- public function buildForm(FormBuilderInterface $builder,array $options)
- {
- ...
- }
- public function getName()
- {
- return 'my_form';
- }
- public function getParent()
- {
- return 'top_form';
- }
- }
模板 – 主题明智(我甚至可以这么说吗?),如果没有为my_form设置特定的表单主题,Symfony会理解这里使用的默认表单主题是top_form的表单主题,您可以这样定义:
- {% block top_form_widget %}
- {% spaceless %}
- {% for child in form %}
- <div class="form-group">
- {{ form_widget(child) }}
- </div>
- {% endfor %}
- {{ form_rest(form) }}
- {% endspaceless %}
- {% endblock top_form_widget %}
我应该补充一点,这是我遇到并解决的问题.告诉我这对你有什么用.
编辑:
总结一下,你要做的是:
>创建TopType表单类型,>在表单主题中添加top_form_widget块,>对于所有根表单(即顶级表单,没有父表单的表单),添加一个getParent()方法,该方法将返回TopType表单的名称(“top_form”)