Symfony:如何在实体__toString中使用翻译组件?
问题描述:
是的,我知道这已被问及之前,但我有一个很好的用例。我有兴趣学习面向视图的补充方法。Symfony:如何在实体__toString中使用翻译组件?
用例:
我有一个实体,说Venue (id, name, capacity)
我在EasyAdmin作为收藏使用。为了呈现选择,我需要这个实体具有字符串表示。
我想显示说%name% (%capacity% places)
。
正如您已经正确猜测,我需要单词“地方”翻译。
我想正确呈现__toString()
输出
我不知道如何实现既但我同意这样做
- 直接在实体
__toString()
方法 - 在表单视图第一方法违反了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 }
而这种进入EasyAdmin怎么样? – rishta