Symfony 2 получить языковой стандарт пользователя в форме - PullRequest
2 голосов
/ 25 декабря 2011

Я использую регистрационную форму FOSUser и переписываю регистрационную форму, и там я использую тип сущности для выбранной страны, региона и т. Д. Эти сущности имеют отношение к языку пользователя, и я хочу написать DQL для каждой локали. Как я могу получить локаль пользователя в форме, не переписывая FOSUser: registerAction?

1 Ответ

6 голосов
/ 26 декабря 2011

Вы можете получить пользовательскую локаль, подобную этой, $locale = $this->get('session')->getLocale(); из вашего контроллера, или вы должны передать локаль или весь объект сеанса в конструктор типа формы, определенный следующим образом.

MyFormType.php

use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
class MyFormType extends BaseType
{
    private $session;
    public function __construct($session, $class)
    {
        $this->session = $session;
        parent::__construct($class);
    }

    public function buildForm(FormBuilder $builder, array $options)
    {
        $locale = $this->session->getLocale();

        // Build your form as you need
        $builder
            ->add('property', 'entity', array(
                'class' => 'MyBundle:Property',
                'query_builder' => function(EntityRepository $er)
                {
                    // use $locale here
                }
            );
    }
}

config.yml

fos_user:
  registration:
    form:
      type: my_user_registration

services:
  my.registration.form.type:
    class: My\UserBundle\Form\Type\MyFormType
    arguments: [@session, %fos_user.model.user.class%]
    tags:
        - { name: form.type, alias: my_user_registration }
...