web-dev-qa-db-fra.com

Symfony récupère les données du formulaire dans le contrôleur

J'ai cette vue:

//login.html.twig

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>MY APP</title>
</head>

<body>
    <form action="{{ path('conection') }}" method="post" name="formulario_login">
        <label for="username">User:</label>
        <input type="text" id="username" name="_username" value="{{ last_username|default('') }}" />
        <br />
        <label for="password">Password:</label>
        <input type="password" id="password" name="_password" />
        <br />
        <input type="checkbox" id="remember_me" name="_remember_me"/>
        <label for="remember_me">Remember me</label>
        <br />
        <input type="submit" name="login" value="Login" />
    </form>
</body>
</html>

Dans mon fichier de routage:

conection:
pattern:  /conection
defaults: { _controller: UserBundle:Default:conection}

Et mon contrôleur

<?php

namespace myApp\UserBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends Controller
{
    //some other action functions

    public function conectionAction(){

    }
}

Ma question est de savoir comment obtenir dans le contrôleur les valeurs des champs utilisateur et mot de passe pour travailler avec eux? J'ai une recherche mais je ne vois pas de solution claire.

6
SensacionRC

Essayez ceci, à titre d'exemple et en utilisant Symfony2.8

Voir:

  <form action="{{ path('connection') }}" method="post" name="formulario_login">
        <label for="username">User:</label>
        <input type="text" id="username" name="_username" value="" />
        <br />
        <label for="password">Password:</label>
        <input type="password" id="password" name="_password" />
        <br />
        <input type="checkbox" id="remember_me" name="_remember_me"/>
        <label for="remember_me">Remember me</label>
        <br />
        <input type="submit" name="login" value="Login" />
    </form>

Contrôleur:

public function connectionAction(Request $request) {
    $username = $request->request->get('_username');
    $password = $request->request->get('_password');
     ....
}

Une autre façon d'obtenir des paramètres, comme vous pouvez le voir, le nommage n'est pas si intuitif:

 // $_GET parameters
$request->query->get('name');

// $_POST parameters
$request->request->get('name');
13
rescobar

Vous devez passer l'objet Request à la méthode d'action puis le traiter:

public function conectionAction(Request $request){
    if ($request->getMethod() == Request::METHOD_POST){
        $user = $request->request->get('user');
        $password = $request->request->get('password');
    }
}

Cependant, je vous suggère d'utiliser le Symfony Form Component pour composer avec cette situation.

2
Matteo