FOSUserBundle登録フォームからフォームデータを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com//questions/21017566

質問

私は使用しています FOSUserBundle そして、上書きしている RegistrationController.フォームが送信されて有効になったら、ユーザーが登録フォームに入力したメールアドレスを取得したいと思います。

しかし、私はそれを得る方法を見ていません。から取られたように Symfony2フォームドキュメント, 、次のようなフォームデータを取得できます:

$this->get('request')->request->get('name');

しかし、 RegistrationController 知らないのですが------ get() メソッド(Symfony2コントローラエンティティから継承されていないため)。だから私はこのように行くことができます:

// Note the ...->container->...
$this->container->get('request')->request->get('name');

しかし、これは戻ります NULL.今、私はからそれを取得しようとします $form.

// Does contain a lot of stuff, but not the entered email address
$form->get('email');

// Does also contain a lot of stuff, but not the desired content
$request->get('email');
$request->request('email');

// Throws error message: No method getData()
$request->getData();

何か考えは?

役に立ちましたか?

解決

それは本当に、本当に簡単です。関連するエンティティを持つフォームを作成します。FOSUserBundleでは、次のようになります。 RegistrationFormHandler, 、およびで process あなたが持っている方法:

$user = $this->createUser();
$this->form->setData($user);
if ('POST' === $this->request->getMethod()) {
     $this->form->bind($this->request);
     if ($this->form->isValid()) /**(...)**/

行の後 $this->form->bind($this->request) のすべての値 $user オブジェクトはフォームからのデータによって上書きされます。だからあなたは使うことができます $user->getEmail().

一方、リクエストから直接データを取得することはできますが、プロパティ名ではなくフォーム名で取得することができます。FOSUserBundle登録フォームでは、次のように呼ばれます fos_user_registration -あなたはそれを見つけることができます FOS/UserBundle/Form/Type/RegistrationFormType.phpgetName メソッド。

あなたはそれを得る:

$registrationArray = $request->get('fos_user_registration');
$email = $registrationArray['email'];

他のヒント

Controllerをサービスとして使用する場合(これで動作するはずです)、コンストラクターでRequestStack(sf>=2.4)を渡して次のようにすることができます $this->request_stack->getCurrentRequest()->get();

私の推測では、あなたはPOSTデータを取得しようとしているということです。あなたは私が推測するフォームオブジェクトにデータを入れようとしています。私はあなたが見てみることをお勧めします: http://symfony.com/doc/current/book/forms.html カスタムフォームがある場合。

あなたの質問に関しては、フォームにはおそらく名前が含まれています。フォームで物事を行うのではなく、直接アクセスしたい場合は、true deepのtrueを介して直接マルチレベルで取得する必要があります, get('registration_form_name[email]', null, true); あなたも行うことができます $email = $request->get('registration_form_name')['email']; (あなたがphp5.4+を持っている場合)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top