2017-09-22 5 views
3

어떻게 형식 형식의 로케일을 가져올 수 있습니까?Symfony2.8 양식 유형에 로케일 가져 오기

이 내 컨트롤러에 있습니다

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

하지만 난 거기에 로케일을 얻는 방법 질수 그림 :

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

나는 내 양식 빌더이 있습니다.

+1

당신이 클라이언트 로케일 또는 서버 로케일을 취득 할 수 있습니까? 사용자의 지역 체크 아웃을위한 – LBA

+0

[symfony doc] (http://symfony.com/doc/2.8/translation/locale.html) – LBA

+0

클라이언트 로켈, 다음과 같은 컨트롤러에서 얻을 수 있습니다.> $ locale = $ request-> getLocale(); – Keutelvocht

답변

2

당신은 서비스로 양식을 등록하고 요청 스택을 주입 할 수

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

다음 빌더 기능이 같은 로케일 변수를 사용

당신이 intl 모듈을 설치 한 경우
$this->locale 
+0

이 양식을 내 양식에 어떻게 받아들입니까? 나는 그것을 형태로 얻을 수 없다. 나는 생성자와 함께 시도하고 OptionsResolvers하지만 nothings 작동합니다. – Keutelvocht

+1

@Keutelvocht 만약'new ConfiguratorClientType ($ locale)'처럼'__construct ($ locale)'에 넣으면 – kunicmarko20

+0

나는 파라미터가 누락되었습니다. 나는 바보 같은 것을 놓치고 있어야합니다. – Keutelvocht

2

, 현재 로케일 값을 얻으려면 \Locale::getDefault()을 안전하게 사용할 수 있습니다. 이 메소드는 디폴트로만 사용되지만, Request::setLocale 메소드에서 Symfony가하는 것만 변경하면 \Locale::setDefault($locale)을 통해 변경할 수 있습니다. 따라서

이 당신을 위해 작동합니다 :

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