ОК, это вопрос новичков, но я не могу найти ответ нигде. В контроллере 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
ничего не возвращает. Что я делаю не так? Благодарю!
это решение устарело с 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()
удаляет элемент из массива
начиная с 2.3, вы должны использовать handleRequest
вместо bindRequest
:
$form->handleRequest($request);
Значения даты формы сохраняются под именем формы в запросе. Например, если вы переопределили метод getName()
метода ContactType(), чтобы вернуть "контакт", вы должны сделать следующее:
$postData = $request->request->get('contact');
$name_value = $postData['name'];
Если у вас все еще есть проблемы, попробуйте сделать var_dump()
on $request->request->all()
, чтобы увидеть все значения post.
что сработало для меня, было это:
$data = $request->request->all();
$name = $data['form']['name'];
Существует один трюк с методом ParameterBag::get()
. Вы можете установить $deep
параметр на true
и получить доступ к требуемому глубокому вложенному значению без дополнительной переменной:
$request->request->get('form[some][deep][data]', null, true);
Также у вас есть возможность установить значение по умолчанию (2-й параметр метода get()
), он может избежать избыточного вызова isset($form['some']['deep']['data'])
.
Доступ к данным полей можно получить в контроллере с: Листинг 12-34
$form->get('dueDate')->getData();
Кроме того, данные немаркированного поля также могут быть изменены непосредственно: Листинг 12-35
$form->get('dueDate')->setData(new \DateTime());
стр. 164 Книга symfony2 (сгенерирована 9 октября 2013 г.)
Я думаю, что для получения данных запроса, связанных и проверенных объектом формы, вы должны использовать:
$form->getClientData();
Я получаю доступ к параметру ticketNumber для моего многостраничного почтового запроса следующим образом.
$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];
Если вы новичок, добро пожаловать в Symfony2, проект с открытым исходным кодом, поэтому, если вы хотите многому научиться, вы можете открыть источник!
От "Form.php":
GetData() getNormData() getViewData()
Подробнее вы можете найти в этом файле.