Dostęp do wartości POST w obiekcie żądania Symfony2
OK, to pytanie dla początkujących, ale nigdzie nie mogę znaleźć odpowiedzi. W kontrolerze w Symfony2 chcę uzyskać dostęp do wartości POST z jednego z moich formularzy. W kontrolerze mam:
public function indexAction()
{
$request = $this->get('request');
if ($request->getMethod() == 'POST') {
$form = $this->get('form.factory')->create(new ContactType());
$form->bindRequest($request);
if ($form->isValid()) {
$name_value = $request->request->get('name');
Niestety $name_value
nic nie zwraca. Co robię źle? Dzięki!
9 answers
Symfony 2.2
To rozwiązanie jest przestarzałe od wersji 2.3 i zostanie usunięte w wersji 3.0, zobacz dokumentację
$form->getData();
Daje tablicę parametrów formularza
Z symfony2 book strona 162 (Rozdział 12: formularze)
[...] czasami możesz po prostu chcieć użyć formularza bez klasy i odzyskać tablicę zgłoszonych data. To naprawdę proste:
public function contactAction(Request $request) {
$defaultData = array('message' => 'Type your message here');
$form = $this->createFormBuilder($defaultData)
->add('name', 'text')
->add('email', 'email')
->add('message', 'textarea')
->getForm();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
// data is an array with "name", "email", and "message" keys
$data = $form->getData();
}
// ... render the form
}
Możesz również uzyskać bezpośredni dostęp do wartości POST (w tym przypadku "name") poprzez obiekt request, Tak:
$this->get('request')->request->get('name');
Należy jednak pamiętać, że w większości przypadków użycie metody getData() jest lepszym wyborem, ponieważ zwraca dane (Zwykle obiekt) po przetworzeniu przez framework formularza.
Gdy chcesz uzyskać dostęp do tokena formularza, musisz użyć odpowiedzi na problematyczne
$postData = $request->request->get('contact');
Ponieważ getData()
usuwa element z tablicy
Symfony 2.3
Od 2.3 powinieneś używać handleRequest
zamiast z bindRequest
:
$form->handleRequest($request);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Wartości formularza post są przechowywane pod nazwą formularza w żądaniu. Na przykład, jeśli nadpisałeś metodę getName()
Metody ContactType (), aby zwrócić "kontakt", zrobisz to:
$postData = $request->request->get('contact');
$name_value = $postData['name'];
Jeśli nadal masz problemy, spróbuj zrobić var_dump()
na $request->request->all()
, aby zobaczyć wszystkie wartości postu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-02 19:24:32
U mnie działało to:
$data = $request->request->all();
$name = $data['form']['name'];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-08 17:30:14
Jest jedna sztuczka z ParameterBag::get()
metodą. Możesz ustawić $deep
parametr do true
i dostęp do wymaganej głęboko zagnieżdżonej wartości bez dodatkowej zmiennej:
$request->request->get('form[some][deep][data]', null, true);
Istnieje również możliwość ustawienia wartości domyślnej (2. parametr metody get()
), pozwala to uniknąć zbędnego wywołania isset($form['some']['deep']['data'])
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-06 15:08:30
Dane pola mogą być dostępne w kontrolerze z: Listing 12-34
$form->get('dueDate')->getData();
Ponadto dane niezmapowanego pola mogą być również modyfikowane bezpośrednio: Listing 12-35
$form->get('dueDate')->setData(new \DateTime());
Strona 164 symfony2 book (wygenerowana 9 października 2013)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-13 11:31:13
Uzyskuję dostęp do parametru ticketNumber dla mojego wieloczęściowego żądania post w następujący sposób.
$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-19 12:46:56
Myślę, że aby uzyskać dane żądania, powiązane i zatwierdzone przez obiekt formularza, należy użyć :
$form->getClientData();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-23 10:29:09
Symfony doc aby uzyskać dane żądania
Wreszcie, surowe dane wysłane z treścią żądania mogą być dostępne za pomocą getContent ():
$content = $request - >getContent ();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-21 09:55:12
Jeśli jesteś nowicjuszem, Witaj w Symfony2, projekcie open-source, więc jeśli chcesz się wiele nauczyć, możesz otworzyć źródło !
Od " Forma.php": {]}
GetData() getNormData() getViewData ()
Więcej szczegółów znajdziesz w tym pliku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-02 14:11:09