Доступ к значениям POST в объекте запроса Symfony2

ОК, это вопрос новичков, но я не могу найти ответ нигде. В контроллере 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 ничего не возвращает. Что я делаю не так? Благодарю!

Ответ 1

Symfony 2.2

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

$form->getData();

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

из книга symfony2 стр. 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 (в данном случае "имя" ) непосредственно через объект запроса, например:

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

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

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


Symfony 2.3

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

 $form->handleRequest($request);

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

Ответ 2

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

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

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

Ответ 3

что сработало для меня, было это:

$data = $request->request->all();
$name = $data['form']['name'];

Ответ 4

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

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

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

Ответ 5

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

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

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

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

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

Ответ 6

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

$form->getClientData();

Ответ 7

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

$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];

Ответ 8

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

От "Form.php":

GetData() getNormData() getViewData()

Подробнее вы можете найти в этом файле.