如何在字体中获取区域设置?
这是在我的控制器中:
$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'
)
)
)
但我无法弄清楚如何在那里获取语言环境。
答案 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