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()));
}
Aber ich bekomme folgende Warnung:
Warnung: array_replace_recursive () [function.array-replace-recursive]: Argument Nr. 1 ist kein Array in der Zeile \ vendor \ symfony \ src \ Symfony \ Component \ Form \ Form.php 593 500 Interner Serverfehler - ErrorException
Kann mir jemand helfen zu verstehen, was falsch ist und wie ich es beheben 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}
Keines der oben genannten hat bei mir funktioniert. Das funktioniert bei mir:
$username = $form["username"]->getData(); $password = $form["password"]->getData();
Ich hoffe, es hilft.
quelle
In Symfony 2 (genauer gesagt in der Version 2.3) können Sie Daten eines Felds von abrufen
$var = $form->get('yourformfieldname')->getData();
oder Sie können alle Daten senden lassen
Dabei ist '$ data' ein Array, das die Werte Ihrer Formularfelder enthält.
quelle
In Symfony> = 2.3 können Sie den Wert einzelner Felder abrufen mit:
$var = $form->get('yourformfieldname')->getData();
Auf der anderen Seite können Sie verwenden:
ABER das würde dir zwei verschiedene Dinge bringen:
die Entität mit den vom Formular
data-class
ausgefüllten Werten, wenn für Ihr Formular die Option aktiviert ist (es ist also an eine Entität gebunden); dies ausschließt jedes Feld mit der'mapping' => false
OptionAndernfalls ein Array mit allen Feldern des Formulars
quelle
Wenn Sie zusätzliche Felder in dem Formular haben, die nicht in Entity definiert sind,
$form->getData()
funktioniert dies nicht. Eine Möglichkeit ist folgende:$request->get("form")["foo"]
Oder :
$form->get('foo')->getData();
quelle
In Symfony- Formularen gibt es zwei verschiedene Arten von Transformatoren und drei verschiedene Arten von zugrunde liegenden Daten: In jeder Form sind die drei verschiedenen Arten von Daten:
Modelldaten
Dies sind die Daten in dem Format, das in Ihrer Anwendung verwendet wird (z. B. ein Issue-Objekt). Wenn Sie
Form::getData()
oder anrufenForm::setData()
, haben Sie es mit den "Modell" -Daten zu tun.Normdaten
Dies ist eine normalisierte Version Ihrer Daten und entspricht im Allgemeinen Ihren "Modell" -Daten (in unserem Beispiel jedoch nicht). Es wird nicht häufig direkt verwendet.
Daten anzeigen
In diesem Format werden die Formularfelder selbst ausgefüllt. Es ist auch das Format, in dem der Benutzer die Daten übermittelt. Wenn Sie aufrufen
Form::submit($data)
, liegen die $ data im Datenformat "view" vor.Die zwei verschiedenen Arten von Transformatoren helfen bei der Konvertierung zu und von jedem dieser Datentypen:
Modelltransformatoren :
transform()
: "Modelldaten" => "Normdaten"reverseTransform()
: "Normdaten" => "Modelldaten"Transformatoren anzeigen :
transform()
: "Normdaten" => "Daten anzeigen"reverseTransform()
: "Daten anzeigen" => "Normdaten"Welchen Transformator Sie benötigen, hängt von Ihrer Situation ab.
Rufen Sie an, um den Ansichtstransformator zu verwenden
addViewTransformer()
.Wenn Sie alle Formulardaten erhalten möchten:
Wenn Sie nach einem bestimmten Formularfeld suchen (zum Beispiel
first_name
):$form->get('first_name')->getData();
quelle
Um die Daten eines bestimmten Feldes abzurufen,
$form->get('fieldName')->getData();
Oder für alle Formulardaten
Link zu Dokumenten: https://symfony.com/doc/2.7/forms.html
quelle
Ich habe es dadurch zum Laufen gebracht:
if ($request->getMethod() == 'POST') { $username = $request->request->get('username'); $password = $request->request->get('password'); // Do something with the post data }
Sie müssen auch die Request $ -Anforderung als Parameter in der Funktion haben! Hoffe das hilft.
quelle
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.
quelle
private function getFormDataArray($form) { $data = []; foreach ( $form as $key => $value) { $data[$key] = $value->getData(); } return $data; }
quelle
$data[$key] = is_object($value->getData()) ? $this->getFormDataArray($value) : $value->getData();
Wenn Sie die Sicherheitsverwaltung von Symfony 2 verwenden, müssen Sie keine veröffentlichten Werte abrufen, sondern nur die Formularvorlage verwalten (siehe Dokumentation ).
Wenn Sie Symfony 2 Security Management nicht verwenden, empfehle ich Ihnen dringend, es zu verwenden. Wenn Sie nicht wollen oder nicht können, können Sie uns die
LoginType
Quellen geben?quelle
Wenn Symfony 4 oder 5, verwenden Sie diesen Code (wobei name der Name Ihres Feldes ist):
$request->request->get('name');
quelle
Für nicht zugeordnete Formularfelder verwende ich $ form-> get ('inputName') -> getViewData ();
quelle