我在表单字段上为我的User类做了一个数据转换器。用户可以输入他们想要发送私人消息的另一个用户名。它也有标题和内容,但现在这并不重要。
下面是表单构建器:public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('content', 'textarea')
->add(
'receiver',
'text',
array(
// validation message if the data transformer fails
'invalid_message' => 'That is not a valid user',
)
);
$builder->get('receiver')->addModelTransformer(new UserTransformer($this->manager));
}
我想做的是获得invalid_message
错误并将其放入翻译文件中。问题是我必须写在这里:
->add('receiver',
'text',
array('invalid_message' => 'user.invalid')
将从我的翻译中摘取。
是否有办法在我的实体类与所有其他验证器,而不是在表单类型类有这个消息?我不想在我的文件中到处散布验证消息
要回答您的问题,如果您真的想在实体中存储所有消息转换键,您可以将它们存储在实体类中的常量数组中。
例如,您的实体类可能看起来像:
//..
class Foo
{
const MESSAGES = [
'invalidUser' => 'user.invalid'
];
public static function getMessages()
{
return self::MESSAGES;
}
//..
}
和数据转换器中的
->add('receiver',
'text', [
'invalid_message' => Foo::getMessages()['invalidUser']
]
我仍然不能完全理解这背后的动机。在某些时候,您需要确定要在数据转换器中显示的消息。那么,为什么不直接提供与此消息关联的转换键,而是通过实体检索它呢?
应该收集消息的地方只有翻译文件。实体类中的验证器以及数据转换器仅用于提供良好的转换键。