Używam formularza logowania w Symfony2 z następującym kodem kontrolera
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()));
}
Ale otrzymuję następujące ostrzeżenie:
Ostrzeżenie: array_replace_recursive () [function.array-replace-recursive]: Argument nr 1 nie jest tablicą w \ vendor \ symfony \ src \ Symfony \ Component \ Form \ Form.php wiersz 593500 Wewnętrzny błąd serwera - wyjątek ErrorException
Czy ktoś może mi pomóc zrozumieć, co jest nie tak i jak mogę to naprawić? Dzięki.
Aktualizacja: plik twig wygląda mniej więcej tak:
<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>
Oto funkcja w typie formularza
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('username', 'text', array('label' => 'Username : '));
$builder->add('pwd_hash','password', array('label' => 'Password : '));
}
Oto trasa:
site_user_login:
pattern: /{_locale}/login
defaults: {_controller: GDSiteBundle:SiteUser:login}
Żadne z powyższych nie działało dla mnie. To działa dla mnie:
$username = $form["username"]->getData(); $password = $form["password"]->getData();
Mam nadzieję, że to pomoże.
źródło
W Symfony 2 (a dokładniej w wersji 2.3) możesz pobrać dane pola wg
$var = $form->get('yourformfieldname')->getData();
lub możesz otrzymać wszystkie wysłane dane
$data = $form->getData();
gdzie „$ data” to tablica zawierająca wartości pól formularza.
źródło
W Symfony> = 2.3 możesz uzyskać wartość pojedynczych pól za pomocą:
$var = $form->get('yourformfieldname')->getData();
Z drugiej strony możesz użyć:
$data = $form->getData();
ALE to dałoby ci dwie różne rzeczy:
encja z wartościami wypełnionymi przez formularz, jeśli formularz ma
data-class
włączoną opcję (więc jest powiązany z jednostką); spowoduje to wykluczenie wszystkich pól z'mapping' => false
opcjąw przeciwnym razie tablica zawierająca wszystkie pola formularza
źródło
Jeśli masz dodatkowe pola w formularzu, które nie są zdefiniowane w Entity,
$form->getData()
nie działają, jednym ze sposobów może być:$request->get("form")["foo"]
Lub:
$form->get('foo')->getData();
źródło
W formach Symfony istnieją dwa różne typy transformatorów i trzy różne typy danych bazowych: W dowolnej formie trzy różne typy danych to:
Dane modelu
Są to dane w formacie używanym w Twojej aplikacji (np. Obiekt Issue). Jeśli dzwonisz
Form::getData()
lubForm::setData()
masz do czynienia z danymi „modelowymi”.Dane norm
To jest znormalizowana wersja Twoich danych i zwykle są takie same jak dane „modelowe” (choć nie w naszym przykładzie). Nie jest powszechnie używany bezpośrednio.
Wyświetl dane
Jest to format używany do wypełniania samych pól formularza. Jest to również format, w jakim użytkownik będzie przesyłał dane. Kiedy dzwonisz
Form::submit($data)
, $ data ma format danych „widok”.Dwa różne typy transformatorów pomagają w konwersji do iz każdego z tych typów danych:
Modelowe transformatory :
transform()
: "dane modelu" => "dane norm"reverseTransform()
: "dane norm" => "dane modelu"Zobacz transformatory :
transform()
: "dane norm" => "wyświetl dane"reverseTransform()
: "wyświetl dane" => "dane norm"To, który transformator potrzebujesz, zależy od Twojej sytuacji.
Aby skorzystać z transformatora widoku, zadzwoń
addViewTransformer()
.Jeśli chcesz uzyskać wszystkie dane formularza:
$form->getData();
Jeśli szukasz określonego pola formularza (na przykład
first_name
):$form->get('first_name')->getData();
źródło
Aby uzyskać dane z określonego pola,
$form->get('fieldName')->getData();
Lub dla wszystkich danych formularza
$form->getData();
Link do dokumentów: https://symfony.com/doc/2.7/forms.html
źródło
Mam to działające przez to:
if ($request->getMethod() == 'POST') { $username = $request->request->get('username'); $password = $request->request->get('password'); // Do something with the post data }
W funkcji również musisz mieć żądanie Request $ jako parametr! Mam nadzieję że to pomoże.
źródło
Myślę, że aby uzyskać dane żądania, powiązane i zatwierdzone przez obiekt formularza, musisz użyć tego polecenia:
$form->getViewData(); $form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3.
źródło
private function getFormDataArray($form) { $data = []; foreach ( $form as $key => $value) { $data[$key] = $value->getData(); } return $data; }
źródło
$data[$key] = is_object($value->getData()) ? $this->getFormDataArray($value) : $value->getData();
Jeśli korzystasz z zarządzania bezpieczeństwem Symfony 2, nie musisz pobierać zaksięgowanych wartości, wystarczy zarządzać szablonem formularza (zobacz dokumentację ).
Jeśli nie korzystasz z zarządzania bezpieczeństwem Symfony 2, radzę go używać. Jeśli nie chcesz lub nie możesz, czy możesz podać nam
LoginType
źródła?źródło
Jeśli Symfony 4 lub 5, po prostu użyj tego kodu (gdzie nazwa to nazwa twojego pola):
$request->request->get('name');
źródło
Dla niezamapowanych pól formularza używam $ form-> get ('inputName') -> getViewData ();
źródło