在带有翻译的实体 class 中定义数据转换器 invalid_message 错误
Define data transformer invalid_message error in entity class with translations
我在表单字段上为我的用户 class 创建了一个数据转换器。用户可以输入他们要向其发送私人消息的另一个用户名。它还有一个标题和内容,但现在这并不重要。
这是表单生成器:
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 中包含此消息以及所有其他验证器,而不是将其包含在表单类型 class 中?我不想在我的文件中到处散播我的验证信息。
为了回答您的问题,如果您真的想将所有消息翻译密钥存储在您的实体中,您可以将它们存储在实体中的常量数组中 class。
例如,您的实体 class 可能看起来像:
//..
class Foo
{
const MESSAGES = [
'invalidUser' => 'user.invalid'
];
public static function getMessages()
{
return self::MESSAGES;
}
//..
}
并在您的数据转换器中:
->add('receiver',
'text', [
'invalid_message' => Foo::getMessages()['invalidUser']
]
我仍然无法完全理解这背后的动机。您有时需要确定要在数据转换器中显示的消息。那么不直接提供与此消息关联的翻译密钥,而是通过实体检索它有什么意义呢?
你的消息应该聚集的地方只有翻译文件。您的实体 class 中的验证器以及您的数据转换器仅用于提供良好的翻译密钥。
我在表单字段上为我的用户 class 创建了一个数据转换器。用户可以输入他们要向其发送私人消息的另一个用户名。它还有一个标题和内容,但现在这并不重要。
这是表单生成器:
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 中包含此消息以及所有其他验证器,而不是将其包含在表单类型 class 中?我不想在我的文件中到处散播我的验证信息。
为了回答您的问题,如果您真的想将所有消息翻译密钥存储在您的实体中,您可以将它们存储在实体中的常量数组中 class。
例如,您的实体 class 可能看起来像:
//..
class Foo
{
const MESSAGES = [
'invalidUser' => 'user.invalid'
];
public static function getMessages()
{
return self::MESSAGES;
}
//..
}
并在您的数据转换器中:
->add('receiver',
'text', [
'invalid_message' => Foo::getMessages()['invalidUser']
]
我仍然无法完全理解这背后的动机。您有时需要确定要在数据转换器中显示的消息。那么不直接提供与此消息关联的翻译密钥,而是通过实体检索它有什么意义呢?
你的消息应该聚集的地方只有翻译文件。您的实体 class 中的验证器以及您的数据转换器仅用于提供良好的翻译密钥。