Estoy usando un formulario de inicio de sesión en Symfony2 con el siguiente código de controlador
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 recibo la siguiente advertencia:
Advertencia: array_replace_recursive () [function.array-replace-recursive]: El argumento n. ° 1 no es una matriz en \ vendor \ symfony \ src \ Symfony \ Component \ Form \ Form.php línea 593 500 Error interno del servidor - ErrorException
¿Puede alguien ayudarme a comprender qué es incorrecto y cómo puedo solucionarlo? Gracias.
Actualización: el archivo twig 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í está la función en el tipo de 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}
Ninguno de los anteriores funcionó para mí. Esto funciona para mi:
$username = $form["username"]->getData(); $password = $form["password"]->getData();
Espero que ayude.
fuente
En Symfony 2 (para ser más específico, la versión 2.3) puedes obtener los datos de un campo por
$var = $form->get('yourformfieldname')->getData();
o puede enviar todos los datos
donde '$ data' es una matriz que contiene los valores de sus campos de formulario.
fuente
En Symfony> = 2.3, puede obtener el valor de campos individuales con:
$var = $form->get('yourformfieldname')->getData();
Por otro lado, puedes usar:
PERO esto te daría dos cosas diferentes:
la entidad con valores poblados por el formulario, si su formulario tiene la
data-class
opción habilitada (por lo que está vinculado a una entidad) esto excluirá cualquier campo con la'mapping' => false
opciónde lo contrario, una matriz con todos los campos del formulario
fuente
Si tiene campos adicionales en el formulario que no están definidos en Entity,
$form->getData()
no funcionan, una forma podría ser esta:$request->get("form")["foo"]
O bien:
$form->get('foo')->getData();
fuente
En los formularios de Symfony , hay dos tipos diferentes de transformadores y tres tipos diferentes de datos subyacentes: En cualquier formulario, los tres tipos diferentes de datos son:
Datos del modelo
Estos son los datos en el formato utilizado en su aplicación (por ejemplo, un objeto Issue). Si llama
Form::getData()
oForm::setData()
, está tratando con los datos del "modelo".Datos normativos
Esta es una versión normalizada de sus datos y, por lo general, es la misma que los datos de su "modelo" (aunque no en nuestro ejemplo). No se suele utilizar directamente.
Ver datos
Este es el formato que se usa para completar los campos del formulario. También es el formato en el que el usuario enviará los datos. Cuando llama
Form::submit($data)
, los $ datos están en el formato de datos "ver".Los dos tipos diferentes de transformadores ayudan a convertir hacia y desde cada uno de estos tipos de datos:
Transformadores modelo :
transform()
: "datos del modelo" => "datos de la norma"reverseTransform()
: "datos de la norma" => "datos del modelo"Ver transformadores :
transform()
: "norm data" => "ver datos"reverseTransform()
: "ver datos" => "norm data"El transformador que necesita depende de su situación.
Para usar el transformador de vista, llame
addViewTransformer()
.Si desea obtener todos los datos del formulario:
Si busca un campo de formulario específico (por ejemplo
first_name
):$form->get('first_name')->getData();
fuente
Para obtener los datos de un campo específico,
$form->get('fieldName')->getData();
O para todos los datos del formulario
Enlace a documentos: https://symfony.com/doc/2.7/forms.html
fuente
Lo tengo funcionando con esto:
if ($request->getMethod() == 'POST') { $username = $request->request->get('username'); $password = $request->request->get('password'); // Do something with the post data }
¡También debe tener la solicitud Request $ como parámetro en la función! Espero que esto ayude.
fuente
Creo que para obtener los datos de la solicitud, vinculados y validados por el objeto de formulario, debe usar este comando:
$form->getViewData(); $form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3.
fuente
private function getFormDataArray($form) { $data = []; foreach ( $form as $key => $value) { $data[$key] = $value->getData(); } return $data; }
fuente
$data[$key] = is_object($value->getData()) ? $this->getFormDataArray($value) : $value->getData();
Si está utilizando la administración de seguridad de Symfony 2, no necesita obtener valores publicados, solo necesita administrar la plantilla de formulario (consulte la documentación ).
Si no está utilizando la gestión de seguridad de Symfony 2, le recomiendo encarecidamente que la utilice. Si no quiere o no puede, ¿puede darnos las
LoginType
fuentes de?fuente
Si es Symfony 4 o 5, simplemente use este código (donde nombre es el nombre de su campo):
$request->request->get('name');
fuente
Para los campos de formulario no asignados, uso $ formulario-> get ('inputName') -> getViewData ();
fuente