鉴于Symfony 2.8项目,我希望使用一种更复杂的类型,其中包含4个文本输入字段(原因是用户输入每周工作日的开放时间)。
我的问题:
如何定义具有多个表单元素的此类型的自定义树枝模板? symfony如何知道哪个模板属于哪种类型? 我阅读了docs,但它们与不合适的标签和名称不匹配。
到目前为止我做了什么:
我创建了以下类型:
/**
* Class OpeningType
*/
class OpeningType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('from', 'text', [
'label' => '',
'attr' => ['placeholder' => '08:00']
]);
$builder->add('until', 'text', [
'label' => '',
'attr' => ['placeholder' => '18:00']
]);
}
}
第一次尝试时,我只在这里添加了两个文本字段。
该类型已注册为服务:
example.form.type.opening:
class: Example\MainBundle\Form\Type\OpeningType
tags:
- { name: form.type }
...并以这种方式添加到主表单中:
->add('opening_monday', OpeningType::class, ['label' => 'Monday'])
如何将自定义窗口小部件用作此自定义类型的树枝模板?
答案 0 :(得分:0)
以下是doc中为主题定制的链接: http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-field或 http://symfony.com/doc/current/cookbook/form/form_customization.html#twig
你可以“本地”做什么:
{# /views/Controller/action.html.twig #}
{% block _{ form prefix }_opening_monday_row %}
{# customize theme here #}
{% endblock %}
{% form_theme form _self %}
...
{{ form_row(form.opening_monday) }}
默认情况下,前缀是表单名称'form'和字段名称,这里是'open_monday',您可以在表单构建器中自定义它:
$builder->add('opening_monday', OpeningType::class, ['label' => 'Monday', 'block_name' => 'custom_prefix'])
或全球app/config.yml
:
twig:
form_themes:
- form/custom_fields.html.twig
和app/Resources/views/form/custom_fields.html.twig
:
{% block custom_type_name_raw %}
{# customise "form_row" here #}
{% endblock %}
{% block custom_type_name_label %}
{# customise "form_label" here #}
{% endblock %}
{% block custom_type_name_widget %}
{# customise "form_widget" here #}
{% endblock %}
需要CustomFormType
中的以下方法:
// Symfony 2.8+
public function getBlockPrefix()
{
return "custom_type_name";
}
// before 2.7 included
public function getName()
{
return "custom_type_name";
}
答案 1 :(得分:-1)
我可以自己回答:)
<强> 1。在config.yml中定义form_themes-template:
twig:
form_themes:
- form/fields.html.twig
<强> 2。使用以下内容创建上述文件:
{% block opening_widget %}
{# write your form stuff here #}
{% endblock %}
块名是&#34; opening_widget&#34;因为&#34; OpeningType&#34;是类型的名称。它可以被getPrefixName(或类似的东西)的方法覆盖,但这不是问题。