我想为每个表单元素实现自定义帮助器消息(html数据属性)。帮助程序消息在YAML lang文件(messages.en.yml)中定义,并非所有表单元素都有帮助程序消息。
问题是我不确定是否可以使用Symfony FormType或Symfony Form事件来完成。
我正在考虑将Form事件创建为服务并注入翻译服务,并从那里操纵数据并添加帮助程序类,但我没有找到任何可靠的示例如何完成。
我想的其他选择是使用Trait并在特征中注入翻译服务,然后从那里开始开发我的代码,但它感觉不是那么正确。
有人可以分享他们的经验并了解如何解决这个特殊问题吗?
这是我的设置
messages.en.yml
intro:
created: Intro created!
edited: Intro has been edited successfully!
deleted: Intro has been has been deleted!
index:
title: List of all intros
new:
title: New intro
show:
title: Details of intro
edit:
title: Edit intro
form:
title: Title
content: Content
isEnabled: Is active
tooltip:
title: Please enter title
我的表单类型:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TextType::class, array(
'label_format' => 'admin.intro.form.%name%',
'attr' => [
'data-helper' => 'Please enter title'
]
)
)
->add('content', TextareaType::class, array(
'label_format' => 'admin.intro.form.%name%',
'required' => false,
'attr' => [
'class' => 'mceEditor'
]
)
)
->add('isEnabled', CheckboxType::class, array(
'label_format' => 'admin.intro.form.%name%',
'required' => false,
)
答案 0 :(得分:1)
您可以registering the form as a service执行此操作并将YAML configuration注入表单。
config.yml
message_config:
intro:
created: Intro created!
edited: Intro has been edited successfully!
deleted: Intro has been has been deleted!
index:
title: List of all intros
new:
title: New intro
show:
title: Details of intro
edit:
title: Edit intro
form:
title: Title
content: Content
isEnabled: Is active
tooltip:
title: Please enter title
services.yml
services:
app.form.type.my_form:
class: AppBundle\Form\Type\MyForm
arguments:
- '%message_config%'
tags:
- { name: form.type }
现在,您可以使用FormType中的数组。
<?php
namespace AppBundle\Form\Type;
class MyForm
{
protected $messages;
public function __construct(array $messages)
{
$this->messages = $messages;
}
}
如果翻译服务正在使用YAML配置,则会注入翻译服务。
更新:Symfony使用Translator组件和Twig表单主题执行此操作,请参阅以下注释。