-1

是的,我知道以前有人问过这个问题并且不鼓励这样做,但我有一个很好的用例。我有兴趣学习面向视图的补充方法。

用例:

我有一个实体,说Venue (id, name, capacity)我在 EasyAdmin 中用作集合。为了呈现选择,我要求该实体具有字符串表示形式。

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

正如你猜对的,我需要翻译“ places ”这个词。

我想这样做

  1. 直接在实体的__toString()方法中
  2. 通过正确呈现__toString()输出在表单视图中

我也不知道如何实现,但我同意第一种方法违反了 MVC 模式。

请指教。

4

2 回答 2

2

将其显示为%name% (%capacity% places)表单视图中的“可能”表示形式,因此我会将这种非常具体的表示形式转换为您的表单类型。

您的Venue实体的__toString()方法中可以包含哪些内容:

class Venue 
{
    private $name;

    ... setter & getter method

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

消息.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 }
于 2017-08-28T21:43:48.640 回答
0

我为这个问题实现了一个或多或少复杂的解决方案,请参阅我对这个相关问题的回答:https ://stackoverflow.com/a/54038948/2564552

于 2019-01-04T12:29:31.627 回答