php - voter - symfony2 security




Accedere ai valori POST nell'oggetto richiesta Symfony2 (6)

OK, questa è una domanda per principianti, ma non riesco a trovare la risposta da nessuna parte. In un controller in Symfony2, voglio accedere al valore POST da una delle mie forme. Nel controller ho:

public function indexAction()
{ 
    $request = $this->get('request');
    if ($request->getMethod() == 'POST') {
        $form = $this->get('form.factory')->create(new ContactType());
        $form->bindRequest($request);
        if ($form->isValid()) {
            $name_value = $request->request->get('name');

Sfortunatamente $name_value non restituisce nulla. Che cosa sto facendo di sbagliato? Grazie!


Symfony 2.2

questa soluzione è deprecata dal 2.3 e verrà rimossa in 3.0, vedi documentazione

$form->getData();

ti fornisce un array per i parametri del modulo

dal libro di symfony2 162 (Capitolo 12: Moduli)

[...] a volte, potresti semplicemente voler usare un modulo senza una classe e recuperare una matrice dei dati inviati. Questo è veramente facile:

public function contactAction(Request $request) {
  $defaultData = array('message' => 'Type your message here');
  $form = $this->createFormBuilder($defaultData)
  ->add('name', 'text')
  ->add('email', 'email')
  ->add('message', 'textarea')
  ->getForm();
  if ($request->getMethod() == 'POST') {
    $form->bindRequest($request);
    // data is an array with "name", "email", and "message" keys
    $data = $form->getData();
  }
  // ... render the form
}

Puoi anche accedere ai valori POST (in questo caso "nome") direttamente attraverso l'oggetto richiesta, in questo modo:

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

Si noti, tuttavia, che nella maggior parte dei casi l'uso del metodo getData () è una scelta migliore, poiché restituisce i dati (di solito un oggetto) dopo che sono stati trasformati dal framework del modulo.

Quando si desidera accedere al token del modulo, è necessario utilizzare la risposta di Problematic $postData = $request->request->get('contact'); perché getData() rimuove l'elemento dall'array

Symfony 2.3

dal 2.3 dovresti usare handleRequest invece di bindRequest :

 $form->handleRequest($request);

vedere la documentazione


È possibile accedere ai dati del campo in un controller con: Elenco 12-34

$form->get('dueDate')->getData();

Inoltre, i dati di un campo non mappato possono anche essere modificati direttamente: Listato 12-35

$form->get('dueDate')->setData(new \DateTime());

pagina 164 libro symfony2 (generato il 9 ottobre 2013)


C'è un trucco con il metodo ParameterBag::get() . È possibile impostare il parametro $deep su true e accedere al valore nidificato profondo richiesto senza variabile extra:

$request->request->get('form[some][deep][data]', null, true);

Inoltre hai la possibilità di impostare un valore predefinito (secondo parametro del metodo get() ), può evitare la chiamata ridondante isset($form['some']['deep']['data']) .


I valori del modulo di posta vengono memorizzati sotto il nome del modulo nella richiesta. Ad esempio, se hai sovrascritto il metodo getName () di ContactType () per restituire "contact", dovresti eseguire questa operazione:

$postData = $request->request->get('contact');
$name_value = $postData['name'];

Se hai ancora problemi, prova a fare un var_dump() su $request->request->all() per vedere tutti i valori dei post.


Se sei un principiante, benvenuto in Symfony2, un progetto open-source, quindi se vuoi imparare molto, puoi aprire la fonte!

Da "Form.php":

getData () getNormData () getViewData ()

Puoi trovare maggiori dettagli in questo file.


ciò che ha funzionato per me stava usando questo:

$data = $request->request->all();
$name = $data['form']['name'];




http-post