我想覆盖我的Symfony表单的特定元素,同时允许我的标准模板生成其余字段。到目前为止,这是一个/或。
首先,我的模板生成表单元素
<form action="" method="post" {{ form_enctype(form) }} autocomplete="off">
{% form_theme form 'SuperSecretProjectBundle:Default:collection.html.twig' %}
{{ form_widget(form) }}
<input type="submit" class="right submit button primary small" value="Save" />
</form>
在collection.html.twig中,我有以下块:form_row是通用小部件渲染器,而image_sets_row是我想要覆盖的特定行。
{% block form_row %}
<div class="row">
<div class="large-12 columns{% if not form.vars.valid %}error{% endif %}">
{{ form_label(form) }}
{{ form_widget(form) }}
<small>{{ form_errors(form) }}</small>
</div>
</div>
{% endblock form_row %}
{% block image_sets_row %}
<div id="image_sets">
<div class="row">
<div class="columns large-12">
<a href="#" id="add-image-set" class="button medium secondary right">Add image set</a>
</div>
</div>
</div>
{% endblock %}
这会导致对所有字段使用form_row,而不使用我修改过的块。如何让Symfony输出未被特别覆盖的元素并包含我的新块?
答案 0 :(得分:0)
对于您尝试使用自定义窗口小部件的字段,您需要的是custom field type。
如链接所示,首先需要创建一个自定义Field Type类,如此
// src/AppBundle/Form/Type/ImageSetsType.php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; #should change to whatever parent type you need
class ImageSetsType extends AbstractType{
public function configureOptions(OptionsResolver $resolver){
$resolver->setDefaults( array() ); #set any option defaults you need here
}
public function getParent(){
return ChoiceType::class; #again change this to whatever parent type you need
}
}
接下来,我们让您的模块正常运行
{# app/Resources/views/form/fields.html.twig #}
{% block imagesets_widget %}
<div id="image_sets">
<div class="row">
<div class="columns large-12">
{{ form_label(form) }}
{{ form_widget(child) }}
<a href="#" id="add-image-set" class="button medium secondary right">Add image set</a>
<small>{{ form_errors(form) }}</small>
</div>
</div>
</div>
{% endblock %}
然后您在表单中使用新创建的类型,就像使用其他任何类型一样。
我认为你想要更多一点