是的,我知道之前已经被问过并且气馁,但我有一个很好的用例。我有兴趣学习面向视图的补充方法。
用例:
我有一个实体,说Venue (id, name, capacity)
我在EasyAdmin中用作集合。为了呈现选择,我要求该实体具有字符串表示。
我希望显示屏显示%name% (%capacity% places)
。
正如您所猜测的那样,我需要翻译“地方”这个词。
我可以这样做
__toString()
方法__toString()
输出在表单视图中我不知道如何实现,但我同意第一种方法违反了MVC模式。
请告知。
答案 0 :(得分:1)
将其显示为%name% (%capacity% places)
只是一个"可能"在表单视图中的表示,所以我会将这个非常具体的表示转换为您的表单类型。
Venue 实体的__toString()
方法中包含哪些内容:
class Venue
{
private $name;
... setter & getter method
public function __toString()
{
return $this->getName();
}
}
<强> messages.en.yml 强>:
my_translation: %name% (%capacity% places)
使用choice_label(也值得了解: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 }
答案 1 :(得分:0)
我为该问题实施了一个或多或少复杂的解决方案,请参见以下相关问题的答案:https://stackoverflow.com/a/54038948/2564552