Symfony:如何在实体__toString中使用翻译组件?

问题描述:

是的,我知道这已被问及之前,但我有一个很好的用例。我有兴趣学习面向视图的补充方法。Symfony:如何在实体__toString中使用翻译组件?

用例:

我有一个实体,说Venue (id, name, capacity)我在EasyAdmin作为收藏使用。为了呈现选择,我需要这个实体具有字符串表示。

我想显示说%name% (%capacity% places)

正如您已经正确猜测,我需要单词“地方”翻译。

我想正确呈现__toString()输出

我不知道如何实现既但我同意这样做

  1. 直接在实体__toString()方法
  2. 在表单视图第一方法违反了MVC模式。

    请指教。

显示它%name% (%capacity% places)只是一个“可能”表示在表单视图,所以我会这样非常具体的表现转移到你的表单类型。

什么可以在地点的__toString()方法属于实体:使用choice_label

my_translation: %name% (%capacity% places) 

下一页您表单类型(也:

class Venue 
{ 
    private $name; 

    ... setter & getter method 

    public function __toString() 
    { 
     return $this->getName(); 
    } 
} 

messages.en.yml值得了解:choice_translation_domain):

use Symfony\Component\Translation\TranslatorInterface; 

class YourFormType extends AbstractType 
{ 
    private $translator; 

    public function __construct(TranslatorInterface $translator) 
    { 
     $this->translator = $translator; 
    } 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add(
       'venue', 
       EntityType::class, 
       array(
        'choice_label' => function (Venue $venue, $key, $index) { 
         // Translatable choice labels 
         return $this->translator->trans('my_translation', array(
          '%name%' => $venue->getName(), 
          '%capacity%' => $venue->getCapacity(), 
         )); 
        } 
       ) 
      ); 
    } 

} 

&也注册表单类型的服务services.yml

your_form_type: 
    class: Your\Bundle\Namespace\Form\YourFormType 
    arguments: ["@translator"] 
    tags: 
    - { name: form.type } 
+0

而这种进入EasyAdmin怎么样? – rishta