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

时间:2017-09-22 10:18:48

标签: forms symfony locale symfony-2.8

如何在字体中获取区域设置?

这是在我的控制器中:

$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'
        )
    )
)

但我无法弄清楚如何在那里获取语言环境。

2 个答案:

答案 0 :(得分:4)

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

因此,这应该适合你:

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

答案 1 :(得分:3)

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

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);

并在表单构造中接受它。

编辑:

formtype中的构造函数:

private $locale = 'en';

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

然后在构建器函数中使用这样的locale变量:

$this->locale