Доступ к значениям POST в объекте запроса Symfony2 - PullRequest
94 голосов
/ 02 августа 2011

ОК, это вопрос новичка, но я нигде не могу найти ответ. В контроллере в Symfony2 я хочу получить доступ к значению POST из одной из моих форм. В контроллере у меня есть:

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

К сожалению $name_value ничего не возвращает. Что я делаю неправильно? Спасибо!

Ответы [ 8 ]

126 голосов
/ 02 августа 2011

Значения публикации формы хранятся под именем формы в запросе.Например, если вы переопределили метод getName() метода ContactType () для возврата «контакта», вы должны сделать следующее:

$postData = $request->request->get('contact');
$name_value = $postData['name'];

Если у вас по-прежнему возникают проблемы, попробуйте выполнить команду var_dump() на $request->request->all(), чтобы увидеть все значения сообщений.

99 голосов
/ 27 августа 2012

Symfony 2.2

это решение устарело с 2.3 и будет удалено в 3.0, см. Документацию

$form->getData();

предоставляет массив для параметров формы

из symfony2 book стр. 162 (Глава 12: Формы)

[...] иногда вы можете просто захотеть использовать форму без класса и вернуться назадмассив представленных данных.На самом деле это действительно просто:

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
}

Вы также можете получить доступ к значениям POST (в данном случае «name») напрямую через объект запроса, например:

$this->get('request')->request->get('name');

Однако имейте в виду, что в большинстве случаев лучше использовать метод getData (), так как он возвращает данные (обычно объект) после их преобразования каркасом формы.

Когда выесли вы хотите получить доступ к токену формы, вы должны использовать ответ «Проблематично» $postData = $request->request->get('contact');, поскольку getData() удаляет элемент из массива


Symfony 2.3

начиная с 2.3, вы должны использовать handleRequest вместо bindRequest:

 $form->handleRequest($request);

см. Документацию

38 голосов
/ 08 мая 2012

то, что работало для меня, использовало это:

$data = $request->request->all();
$name = $data['form']['name'];
17 голосов
/ 06 марта 2013

Есть один трюк с методом ParameterBag::get(). Вы можете установить $deep параметр на true и получить доступ к требуемому значению глубокого вложения без дополнительной переменной:

$request->request->get('form[some][deep][data]', null, true);

Также у вас есть возможность установить значение по умолчанию (2-й параметр метода get()), это позволяет избежать избыточного вызова isset($form['some']['deep']['data']).

8 голосов
/ 09 октября 2013

Доступ к данным поля в контроллере осуществляется с помощью: Листинга 12-34

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

Кроме того, данные несопоставленного поля также могут быть изменены напрямую: Листинг 12-35

$form->get('dueDate')->setData(new \DateTime());

стр. 164 Книга symfony2 (выпущена 9 октября 2013 г.)

7 голосов
/ 19 июля 2017

Я получаю доступ к параметру ticketNumber для моего составного почтового запроса следующим образом.

$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];
1 голос
/ 16 апреля 2012

Я думаю, что для того, чтобы получить данные запроса, связанные и проверенные объектом формы, вы должны использовать:

$form->getClientData();

0 голосов
/ 02 августа 2012

Если вы новичок, добро пожаловать в Symfony2, проект с открытым исходным кодом, поэтому, если вы хотите многому научиться, вы можете открыть исходный код!

Из "Form.php":

getData () getNormData () getViewData ()

Вы можете найти более подробную информацию в этом файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...