在带有翻译的实体类中定义数据转换器invalid_message error


Define data transformer invalid_message error in entity class with translations

我在表单字段上为我的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']
       ]

我仍然不能完全理解这背后的动机。在某些时候,您需要确定要在数据转换器中显示的消息。那么,为什么不直接提供与此消息关联的转换键,而是通过实体检索它呢?

应该收集消息的地方只有翻译文件。实体类中的验证器以及数据转换器仅用于提供良好的转换键。