2012-01-24 16 views
67

estoy usando un formulario de acceso en Symfony2 con el siguiente código de controlador deComo llegar valores del formulario en el controlador de Symfony2

public function loginAction(Request $request) 
{ 
    $user = new SiteUser(); 
    $form = $this->createForm(new LoginType(), $user); 


    if ($request->getMethod() == 'POST') { 
     $form->bindRequest($request); 
     $data = $form->getValues(); 
     // Need to do something with the data here 
    } 

    return $this->render('GDSiteBundle::header.html.twig', array('form' => $form->createView())); 
} 

Pero me estoy haciendo la siguiente advertencia:

Advertencia: array_replace_recursive() [function.array-reemplazar-recursivo]: Argumento # 1 no es una matriz de \ proveedor \ Symfony \ src \ Symfony \ Component \ Form \ form.php línea 593 500 Error interno del servidor - ErrorException

¿Alguien me puede ayudar a entender qué es incorrecto y cómo puedo solucionarlo? Gracias.

Actualización: El archivo ramita es algo como esto:

<div class="form"> 
    {{ form_errors(form) }} 
    <form action="{{ path('site_user_login') }}" method="POST" {{ form_enctype(form) }}> 
     <div class="level1"> 
      {{ form_row(form.username) }} 
      <a href="javascript:void(0)" id="inscription">{% trans %}Registration{% endtrans %}</a> 
     </div> 
     <div class="level2"> 
      {{ form_row(form.pwd_hash) }} 
      <div class="forget_pass"><a href="#" id="frgt">{% trans %}Forgot Password ?{% endtrans %}</a></div> 
     </div> 
     <input type="submit" class="submit" name="login" value/> 
     <div class="clr"></div> 
    </form> 
</div> 

Aquí es la función en el tipo del formulario

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('username', 'text', array('label' => 'Username : ')); 
    $builder->add('pwd_hash','password', array('label' => 'Password : ')); 
} 

Aquí está la ruta:

site_user_login: 
    pattern: /{_locale}/login 
    defaults: {_controller: GDSiteBundle:SiteUser:login} 

Respuesta

83

Simplemente:

$data = $form->getData(); 
+1

Respuesta agradable - RE: respuestas a continuación. Symfony a menudo permite muchas formas de obtener resultados similares. Siempre es bueno investigar "Mejores prácticas" al buscar soluciones SF. – JustinP

+8

Para nuevas versiones: $ data = $ form-> all(); – Gmajoulet

2

Si está usando la administración de seguridad de Symfony 2, no necesita obtener los valores contabilizados, solo necesita administrar fo plantilla rm (ver documentation).

Si no está utilizando la administración de seguridad de Symfony 2, le aconsejo encarecidamente que la utilice. Si no quiere o no puede, ¿puede darnos las fuentes LoginType?

+0

Gracias @BlackCharly estoy empezando a lee la documentación. También actualicé el código para darle claridad completa al lector con el mismo. Aprecio tu ayuda. – VishwaKumar

2

Lo tengo trabajo por esto:

if ($request->getMethod() == 'POST') { 
    $username = $request->request->get('username'); 
    $password = $request->request->get('password'); 

    // Do something with the post data 
} 

Usted necesita tener la solicitud Solicitud $ como un parámetro en la función también! Espero que esto ayude.

+0

si su formulario no se está generando mediante el generador de formularios sf2, solo esto le mostrará el valor del formulario, no otras soluciones. +1 amigo –

86

Ninguno de los anteriores funcionó para mí. Esto funciona para mí:

$username = $form["username"]->getData(); 
$password = $form["password"]->getData(); 

Espero que ayude.

+1

Hmmm extraño, lo tengo trabajando con $ request-> request-> get ('username'); ¿Pasó el objeto de solicitud como parámetro de la acción? Y debe incluir la clase de solicitud también en el cuadro anterior. – VishwaKumar

4

creo que con el fin de obtener los datos de la solicitud, con destino y validados por el objeto de formulario, debe utilizar este comando:

$form->getViewData(); 
$form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3. 
+0

Esto es lo que estaba buscando. El proyecto en el que estoy trabajando está en Symfony 2.0 y no se puede actualizar. – Naomi

52

En Symfony 2 (a ser más específicos, la versión 2.3) se puede obtener una información de un campo de

$var = $form->get('yourformfieldname')->getData(); 

o se puede obtener todos los datos enviados

$data = $form->getData(); 

donde '$ data' es una matriz que contiene los valores de sus campos de formulario.

3
private function getFormDataArray($form) 
{ 
    $data = []; 
    foreach ($form as $key => $value) { 
     $data[$key] = $value->getData(); 
    } 
    return $data; 
} 
+0

Si su formulario tiene subformularios, este código debería ser como: '$ data [$ key] = is_object ($ value-> getData())? $ this-> getFormDataArray ($ value): $ value-> getData(); ' – Aliance

16

En Symfony> = 2.3, se puede obtener el valor de los campos individuales con:

$var = $form->get('yourformfieldname')->getData(); 

Por otra parte, se puede utilizar:

$data = $form->getData(); 

PERO esto le conseguiría dos cosas diferentes:

  • la entidad con valores poblados por el formulario, si su formulario tiene activada la opción data-class (por lo que está vinculada a una entidad); esto excluir cualquier campo con la opción 'mapping' => false

  • de otro modo, una matriz con todos los campos del formulario

13

Si tiene campos adicionales en la forma que no se definen en la Entidad, $form->getData() no lo hace trabajo, una forma podría ser la siguiente:

$request->get("form")["foo"] 

O:

$form->get('foo')->getData(); 
+0

¡Gracias! ¡Salvaste mi día! – Crone

+0

¡Gracias! Esto ayudó mucho. – madshvero

+0

si necesita la identificación de la consulta si es un objeto puede ejecutar el siguiente comando: $ form-> get ('foo') -> getData() -> getId(); – juanitourquiza

4

En Symfony forms, hay dos tipos diferentes de transformers y tres tipos diferentes de datos subyacente: enter image description here En cualquier forma, los tres tipos diferentes de datos son:

  • datos de modelos

    Estos son los datos en el formato utilizado en su aplicación (p. Ej. un objeto Issue). Si llama al Form::getData() o Form::setData(), se trata de los datos del "modelo".

  • Norma datos

    Ésta es una versión normalizada de los datos y suele ser el mismo que sus datos "modelo" (aunque no en nuestro ejemplo). No se usa comúnmente directamente.

  • Ver datos

    Este es el formato que se utiliza para rellenar el formulario propios campos. También es el formato en el que el usuario enviará los datos. Cuando llama al Form::submit($data), los $ datos están en el formato de datos "ver".

Los dos tipos diferentes de transformadores ayudan a convertir desde y hacia cada uno de estos tipos de datos:

  • transformadores Modelo:

    transform(): "modelo de datos" => " datos normativos "
    reverseTransform():" datos normativos "=>" datos del modelo "

  • Ver transformadores:

    transform(): "los datos norma" => "vista de datos"
    reverseTransform(): "vista de datos" => "datos normativos"

Qué transformador que necesita depende de tu situación.

Para usar el transformador de visualización, llame al addViewTransformer().


Si desea obtener toda forma de datos:

$form->getData(); 

Si estás después de un campo de formulario específico (por ejemplo first_name):

$form->get('first_name')->getData(); 
Cuestiones relacionadas