Symfony 2 以表单形式获取用户区域设置

标签 symfony fosuserbundle

我使用 FOSUser bundle 并重写注册表单,并且我使用实体类型来选择国家、地区等。该实体与用户区域设置相关,我想为每个区域设置编写 DQL。 如何在不重写 FOSUser:registerAction 的情况下获取表单中的用户区域设置?

最佳答案

您可以从 Controller 获取像这样的用户区域设置 $locale = $this->get('session')->getLocale(); ,或者您应该将区域设置或整个 session 对象传递到表单类型构造函数定义如下。

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 }

关于Symfony 2 以表单形式获取用户区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629924/

相关文章:

symfony - FOS UserBundle UserManager::__construct() 必须是 ObjectManager 的实例

php - symfony 插入多行而不是一行

Symfony2 : disable vendor event listeners

php - 如何在使用 symfony2(和 fosUserBundle)登录时动态添加用户角色?

php - Symfony2 : How to persist a new User in an admin-interface with FOSUserBundle?

php - 没有 FOS bundle 的 Symfony 密码重置

找不到 PHP 7 DOMDocument

php - MySQL 和 Doctrine QueryBuilder 来自三个表的多个 LEFT 和 INNER JOINS

php - FOSUserBundle 覆盖不一致

php - 使用 Symfony2/Symfony3 中的 FOSUserBundle 将用户名字段删除/替换为电子邮件