FOSUserBundle登録フォームからフォームデータを取得するにはどうすればよいですか?
-
21-12-2019 - |
質問
私は使用しています 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.php
で getName
メソッド。
あなたはそれを得る:
$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+を持っている場合)