Come posso ottenere i dati del modulo dal modulo di registrazione del fosuserbundle?
-
21-12-2019 - |
Domanda
Sto usando fosuserbundle e hanno sovrascritto il RegistrationController
.Quando il modulo viene inviato e valido, voglio ottenere l'indirizzo email all'utente inserito nel modulo di registrazione.
Ma non vedo alcun modo per averlo.Come preso da Symfony2 Moduli Documentazione , puoi ottenere dati forme come questo: .
$this->get('request')->request->get('name');
.
Ma il RegistrationController
non conosce il metodo get()
(come non è ereditato dall'entità del controller Symfony2).Quindi potrei andare in questo modo:
// Note the ...->container->...
$this->container->get('request')->request->get('name');
.
Ma questo restituisce NULL
.Ora cerco di ottenerlo dal $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();
.
Qualche idea?
Soluzione
È davvero, davvero semplice.Crei un modulo con entità correlata.In fosuserbundle dovresti avere un RegistrationFormHandler
, e nel metodo process
hai:
$user = $this->createUser();
$this->form->setData($user);
if ('POST' === $this->request->getMethod()) {
$this->form->bind($this->request);
if ($this->form->isValid()) /**(...)**/
.
Dopo la linea $this->form->bind($this->request)
Ogni valore nell'oggetto $user
viene sovrascritto dai dati dal modulo.Quindi puoi usare $user->getEmail()
.
D'altra parte sei in grado di ottenere i dati direttamente dalla richiesta, ma non dal nome della proprietà, ma dal nome del modulo.Nel modulo di registrazione FosuserBundle si chiama fos_user_registration
: puoi trovarlo in FOS/UserBundle/Form/Type/RegistrationFormType.php
nel metodo getName
.
Lo capisci per:
$registrationArray = $request->get('fos_user_registration');
$email = $registrationArray['email'];
. Altri suggerimenti
Se è necessario utilizzare il controller come servizio (che dovrebbe funzionare con questo), è possibile passare la richiesta di richiesta (SF>= 2.4) nel costruttore e fare $this->request_stack->getCurrentRequest()->get();
La mia ipotesi è che stai cercando di ottenere i dati post.Stai cercando di mettere i dati in un oggetto modulo che presumo.Ti consiglierei di dare un'occhiata a: http://symfony.com/doc/current/book/forms.html se hai un modulo personalizzato.
Per quanto riguarda la tua domanda, il modulo sta probabilmente contenente un nome.Se vuoi avere accesso diretto ad esso invece di fare le cose nella tua forma, è necessario prenderla multilivello se direttamente tramite il vero a $ profondo, get('registration_form_name[email]', null, true);
puoi anche fare $email = $request->get('registration_form_name')['email'];
(se hai PHP 5.4 +)