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()];
如何在字体中获取语言环境?
这是在我的控制器中:
$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()];