wake-up-neo.com

So erhalten Sie Formularwerte im Symfony2-Controller

Ich verwende ein Anmeldeformular auf Symfony2 mit dem folgenden Controller-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()));
}

Ich erhalte jedoch folgende Warnung:

Warnung: array_replace_recursive () [function.array-replace-recursive]: Argument # 1 ist kein Array in\vendor\symfony\src\Symfony\Component\Form\Form.php Zeile 593. 500 Interner Serverfehler - ErrorException

Kann mir jemand helfen zu verstehen, was falsch ist und wie ich es reparieren kann? Vielen Dank.

Update: Die Zweigdatei sieht ungefähr so ​​aus:

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

Hier ist die Funktion im Formulartyp

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

Hier ist die Route:

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

Einfach :

$data = $form->getData();
90
Hubert Perron

Keines der oben genannten Dinge funktionierte für mich. Das funktioniert für mich:

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

Ich hoffe, es hilft.

90
pkout

In Symfony 2 (genauer gesagt, Version 2.3) können Sie Daten eines Feldes abrufen

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

oder Sie können alle Daten erhalten

$data = $form->getData();

dabei ist '$ data' ein Array, das die Werte Ihrer Formularfelder enthält.

56
albert

In Symfony> = 2.3 können Sie den Wert einzelner Felder erhalten mit:

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

Andererseits können Sie verwenden:

$data = $form->getData();

ABERdies würde dir zwei verschiedene Dinge bringen:

  • die Entität mit Werten, die mit dem Formular ausgefüllt werden, wenn für das Formular die Option data-class aktiviert ist (damit es an eine Entität gebunden ist); Dadurch wird exclude jedes Feld mit der Option 'mapping' => false

  • andernfalls ein Array mit allen Formularfeldern

20
Jean

Wenn Sie zusätzliche Felder in dem Formular haben, die nicht in Entity definiert sind, funktioniert $form->getData() nicht. Eine Möglichkeit könnte die folgende sein:

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

Oder :

$form->get('foo')->getData();
15
Saman Mohamadi

In Symfony forms gibt es zwei verschiedene Arten von Transformatoren und drei verschiedene Arten von zugrunde liegenden Daten:  enter image description here In jeder Form sind die drei verschiedenen Datentypen:

  • Modelldaten

    Dies sind die Daten in dem Format, das in Ihrer Anwendung verwendet wird (z. B. ein Issue-Objekt). Wenn Sie Form::getData() oder Form::setData() aufrufen, handelt es sich um die "Modell" -Daten.

  • Normdaten

    Dies ist eine normalisierte Version Ihrer Daten und entspricht in der Regel Ihren "Modell" -Daten (in unserem Beispiel jedoch nicht). Es wird nicht direkt verwendet.

  • Daten anzeigen

    Dieses Format wird verwendet, um die Formularfelder selbst auszufüllen. Es ist auch das Format, in dem der Benutzer die Daten übermittelt. Wenn Sie Form::submit($data) aufrufen, haben die $ -Daten das Datenformat "view".

Die zwei verschiedenen Arten von Transformatoren helfen bei der Konvertierung in und aus jedem dieser Datentypen:

  • Modelltransformatoren:

    transform(): "Modelldaten" => "Normdaten"
    reverseTransform(): "Normdaten" => "Modelldaten"

  • View Transformatoren:

    transform(): "Normdaten" => "Daten anzeigen"
    reverseTransform(): "Daten anzeigen" => "Normdaten"

Welchen Transformator Sie benötigen, hängt von Ihrer Situation ab.

Um den View-Transformer zu verwenden, rufen Sie addViewTransformer() auf.


Wenn Sie alle Formulardaten abrufen möchten:

$form->getData();

Wenn Sie sich hinter einem bestimmten Formularfeld befinden (zum Beispiel first_name):

$form->get('first_name')->getData();
5
Trix

Ich habe es durch die Arbeit bekommen:

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

    // Do something with the post data
}

Sie müssen die Request $ -Anforderung auch als Parameter in der Funktion haben! Hoffe, das hilft.

4
VishwaKumar

Ich denke, um die Anforderungsdaten zu erhalten, die vom Formularobjekt gebunden und validiert werden, müssen Sie diesen Befehl verwenden:

$form->getViewData();
$form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3.
4
Chicna
private function getFormDataArray($form)
{
    $data = [];
    foreach ( $form as $key => $value) {
        $data[$key] = $value->getData();
    }
    return $data;
}
3
viciouskinid

Wenn Sie das Sicherheitsmanagement von Symfony 2 verwenden, müssen Sie keine gebuchten Werte abrufen. Sie müssen lediglich die Formularvorlage verwalten (siehe Dokumentation ).

Wenn Sie kein Sicherheitsmanagement von Symfony 2 verwenden, empfehle ich Ihnen dringend, es zu verwenden. Wenn Sie nicht wollen oder nicht können, können Sie uns die Quellen der LoginType geben?

2
BlackCharly

Um die Daten eines bestimmten Feldes zu erhalten,

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

Oder für alle Formulardaten

$form->getData();

Link zu den Dokumenten: https://symfony.com/doc/2.7/forms.html

0
PJately

Für nicht zugeordnete Formularfelder verwende ich $ form-> get ('inputName') -> getViewData ();

0
Strabek