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?

È stato utile?

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 +)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top