85 votes

Comment obtenir les valeurs d'un formulaire dans Symfony2 contrôleur

Je suis à l'aide d'un formulaire de connexion sur Symfony2 avec le contrôleur suivant du code

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()));
}

Mais je reçois le message d'avertissement suivant:

Avertissement: array_replace_recursive() [function.tableau-remplacer-recursive]: l'Argument #1 n'est pas un tableau dans \vendor\symfony\src\Symfony\Component\Form\Form.php ligne 593 500 Internal Server Error - ErrorException

Quelqu'un peut-il m'aider à comprendre ce qui est incorrect, et comment je peux résoudre ce problème? Merci.

Mise à jour: Le rameau de fichier est quelque chose comme ceci:

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

Ici est la fonction de la Forme du Type

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

Voici le parcours:

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

101voto

Hubert Perron Points 1090

Il vous suffit de :

$data = $form->getData();

99voto

pkout Points 1267

Aucun des ci-dessus a fonctionné pour moi. Cela fonctionne pour moi:

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

J'espère que cela aide.

61voto

albert Points 175

Dans symfony 2 ( plus spécifiquement, la version 2.3), vous pouvez obtenir des données d'un champ par

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

ou, vous pouvez obtenir toutes les données transmises

$data = $form->getData();

où '$data' est un tableau pour stocker les champs e les valeurs de votre formulaire.

4voto

Chicna Points 53

Je pense que, pour obtenir les données de la demande, lié et validé par la forme de l'objet, vous devez utiliser cette commande :

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

2voto

BlackCharly Points 516

Si vous êtes à l'aide de Symfony 2 gestion de la sécurité, vous n'avez pas besoin d'être affichés en valeurs, vous n'avez besoin de gérer un modèle de formulaire (voir la documentation).

Si vous n'êtes pas à l'aide de Symfony 2 gestion de la sécurité, je vous conseille fortement de l'utiliser. Si vous ne voulez pas ou si vous ne pouvez pas, pouvez-vous nous donner l' LoginTypes'sources ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X