Я использую два способа проверки своих форм:
Используя $form = …->form();
Затем задаем значения массива $form
(точнее это объект \Symfony\Component\DomCrawler\Form
):
Полный пример из документации:
$form = $crawler->selectButton('submit')->form();
// set some values
$form['name'] = 'Lucas';
$form['form_name[subject]'] = 'Hey there!';
// submit the form
$crawler = $client->submit($form);
Отправив данные POST
напрямую:
Предыдущий код не работает с формами, управляющими коллекциями (полагающимися для полей, созданных Javascript), потому что он выдает ошибку, если поле не существует. Вот почему я также использую другой способ.
Полный пример из документации:
// Directly submit a form (but using the Crawler is easier!)
$client->request('POST', '/submit', array('name' => 'Fabien'));
Это решение — единственный известный мне способ тестирования форм, которые управляют коллекциями с полями, добавленными Javascript (см. ссылку на документацию выше). Но это второе решение сложнее использовать, потому что:
- он не проверяет, какие поля существуют, это непрактично, когда мне нужно отправить форму с существующими полями
and
коллекция, которая опирается на поля, созданные динамически с помощью Javascript - требуется добавить форму
_token
вручную
Мой вопрос
Можно ли использовать синтаксис первого способа для определения существующих полей, а затем добавить новые динамически созданные поля со вторым синтаксисом?
Другими словами, я хотел бы иметь что-то вроде этого:
$form = $crawler->selectButton('submit')->form();
// set some values for the existing fields
$form['name'] = 'Lucas';
$form['form_name[subject]'] = 'Hey there!';
// submit the form with additional data
$crawler = $client->submit($form, array('name' => 'Fabien'));
Но я получаю эту ошибку:
Недоступное поле "имя"
И $form->get('name')->setData('Fabien');
вызывает ту же ошибку.
Этот пример не идеален, потому что в форме нет коллекции, но этого достаточно, чтобы показать вам мою проблему.
Я ищу способ избежать этой проверки, когда добавляю некоторые поля в существующую форму.
POST
напрямую:). - person A.L   schedule 24.09.2015->addNode(…)
, чтобы добавить узел в форму? - person A.L   schedule 29.09.2015