Symfony2.8 在表单类型中获取语言环境

Symfony2.8 get locale in form types

如何在字体中获取语言环境?

这是在我的控制器中:

$form = $this->createForm(new ConfiguratorClientType(), $configuratorClient);

我的表单生成器中有这个:

->add('language',
    EntityType::class,
    array(
        'class' => 'CommonBundle:Language',
        'choice_label' => function ($language) {
            return $language->getName()[$locale];
        },
        'attr' => array(
            'class' => 'form-control'
        )
    )
)

但我不知道如何在其中获取语言环境。

您可以将表单注册为服务并注入请求堆栈:

services:
    form:
        class: YourBundle\Form\Type\YourType
        arguments: ["@request_stack"]
        tags:
            - { name: form.type }

然后根据您的请求获取语言环境。

有关请求堆栈的更多信息 http://symfony.com/doc/current/service_container/request.html

或者您可以将区域设置从您的控制器传递给您的 formType:

$locale = $request->getLocale();
$form = $this->createForm(new ConfiguratorClientType($locale), $configuratorClient);

并在您的表单构造中接受它。

编辑:

表单类型中的构造函数:

private $locale = 'en';

   public function __construct($locale = 'en')
   {
       $this->locale = $locale;
   }

然后在构建器函数中像这样使用语言环境变量:

$this->locale

如果您已经安装了intl模块,您可以安全地使用\Locale::getDefault()来获取当前区域值。即使该方法仅推断默认值,也可以通过 \Locale::setDefault($locale) 更改它,就像 Symfony 在 Request::setLocale 方法中所做的那样。

因此,这应该适合您:

return $language->getName()[\Locale::getDefault()];