FOSUserバンドルを使用して登録フォームを書き換え、国や地域などを選択するためにエンティティタイプを使用します。このエンティティはユーザーロケールと関係があり、ロケールごとにDQLを記述したいと思います。FOSUser:registerActionを書き直さずに、フォームでユーザーロケールを取得するにはどうすればよいですか?
質問する
6101 次
1 に答える
6
コントローラーからこのようなユーザー ロケールを取得できます$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 }
于 2011-12-26T10:50:33.063 に答える