Определить ошибку преобразователя данных invalid_message в классе сущностей с переводами

1

Я создал 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 вместе со всеми другими валидаторами вместо того, чтобы иметь его в классе типа формы? Я не хочу распространять свои сообщения о проверке всюду в своих файлах.

Теги:
symfony-forms

1 ответ

1
Лучший ответ

Чтобы ответить на ваш вопрос, если вы действительно хотите сохранить все ключи перевода сообщения в своей сущности, вы можете сохранить их в постоянном массиве в классе сущности.

Например, ваш класс сущностей может выглядеть так:

//..
class Foo
{
    const MESSAGES = [
        'invalidUser' => 'user.invalid'
    ];

    public static function getMessages()
    {
        return self::MESSAGES;
    }

    //..
}

и в вашем преобразователе данных:

->add('receiver',
      'text', [
           'invalid_message' => Foo::getMessages()['invalidUser']
       ]

Тем не менее я не в полной мере понимаю мотивацию этого. В какой-то момент вам понадобится определить сообщение, которое вы хотите отобразить в вашем трансформаторе данных. Итак, какой смысл не предоставлять непосредственно ключ перевода, связанный с этим сообщением, и вместо этого получать его через объект?

Место, где должны собираться ваши сообщения, - это только файл перевода. Валидаторы в вашем классе сущностей, а также ваш преобразователь данных предназначены только для предоставления хороших ключей перевода.

  • 0
    Для меня не имело особого смысла иметь текст валидатора как в классе сущности, так и в моем преобразователе данных. Мне нравится ваша идея, но, похоже, она не стоит проблем, поэтому я буду придерживаться ее в трансформаторе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню