Я создал Data Transformer для моего класса 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')
Что будет взято из моих переводов.
Есть ли способ иметь это сообщение в моем классе Entity вместе со всеми другими валидаторами вместо того, чтобы иметь его в классе типа формы? Я не хочу распространять свои сообщения о проверке всюду в своих файлах.
Чтобы ответить на ваш вопрос, если вы действительно хотите сохранить все ключи перевода сообщения в своей сущности, вы можете сохранить их в постоянном массиве в классе сущности.
Например, ваш класс сущностей может выглядеть так:
//..
class Foo
{
const MESSAGES = [
'invalidUser' => 'user.invalid'
];
public static function getMessages()
{
return self::MESSAGES;
}
//..
}
и в вашем преобразователе данных:
->add('receiver',
'text', [
'invalid_message' => Foo::getMessages()['invalidUser']
]
Тем не менее я не в полной мере понимаю мотивацию этого. В какой-то момент вам понадобится определить сообщение, которое вы хотите отобразить в вашем трансформаторе данных. Итак, какой смысл не предоставлять непосредственно ключ перевода, связанный с этим сообщением, и вместо этого получать его через объект?
Место, где должны собираться ваши сообщения, - это только файл перевода. Валидаторы в вашем классе сущностей, а также ваш преобразователь данных предназначены только для предоставления хороших ключей перевода.