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!

Author: Ilker Baltaci, 2011-08-02

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

Zobacz dokumentację

 99
Author: timaschew,
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.

 127
Author: Problematic,
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'];
 38
Author: ramzey,
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']).

 17
Author: Dmitriy,
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)
 8
Author: meteor,
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"];
 7
Author: Ilker Baltaci,
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();

 1
Author: Chicna,
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 ();

 0
Author: Alex Joe,
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.

 -14
Author: Thomas Decaux,
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