Frage

Ich verwende das FOSUserBundle und habe die überschrieben RegistrationController.Wenn das Formular abgeschickt wurde und gültig ist, möchte ich die E-Mail-Adresse erhalten, die der Benutzer im Registrierungsformular eingegeben hat.

Aber ich sehe keine Möglichkeit, es zu bekommen.Wie aus dem entnommen Dokumentation zu Symfony2-Formularen, können Sie Formulardaten wie folgt abrufen:

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

Aber die RegistrationController kennt das nicht get() -Methode (da sie nicht von der Symfony2-Controller-Entität geerbt wird).Ich könnte also so vorgehen:

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

Aber das kommt zurück NULL.Jetzt versuche ich es aus dem zu bekommen $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();

Irgendeine Idee?

War es hilfreich?

Lösung

Es ist wirklich, wirklich einfach.Sie erstellen ein Formular mit einer zugehörigen Entität.In FOSUserBundle sollten Sie eine haben RegistrationFormHandler, und in process Methode, die Sie haben:

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

Nach der Zeile $this->form->bind($this->request) jeder Wert in $user Das Objekt wird durch Daten aus dem Formular überschrieben.So können Sie verwenden $user->getEmail().

Andererseits können Sie Daten direkt aus der Anfrage abrufen, jedoch nicht über den Eigenschaftsnamen, sondern über den Formularnamen.Im FOSUserBundle-Registrierungsformular heißt es fos_user_registration - Sie finden es in FOS/UserBundle/Form/Type/RegistrationFormType.php In getName Methode.

Sie erhalten es durch:

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

Andere Tipps

Wenn Sie Controller as a Service verwenden würden (was damit funktionieren sollte), könnten Sie den RequestStack (sf >=2.4) im Konstruktor übergeben und dies tun $this->request_stack->getCurrentRequest()->get();

Ich vermute, dass Sie versuchen, die POST-Daten abzurufen.Ich nehme an, Sie versuchen, die Daten in ein Formularobjekt einzufügen.Ich würde Ihnen empfehlen, einen Blick auf Folgendes zu werfen: http://symfony.com/doc/current/book/forms.html wenn Sie ein benutzerdefiniertes Formular haben.

Was Ihre Frage betrifft, enthält das Formular wahrscheinlich einen Namen.Wenn Sie direkten Zugriff darauf haben möchten, anstatt Dinge in Ihrem Formular zu tun, müssen Sie es auf mehreren Ebenen direkt über true bei $deep abrufen. get('registration_form_name[email]', null, true); Sie können es auch tun $email = $request->get('registration_form_name')['email']; (wenn Sie PHP 5.4+ haben)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top