Я использую phpunit для запуска функциональных тестов, но у меня проблема с некоторыми формами. Проблема в том, что phpunit не знает о JS, и у меня есть форма с динамически заполняемым полем выбора, которому нужен jQuery.
Итак, мне нужно передать данные формы напрямую. В «книге» приводится следующий пример:
// Directly submit a form (but using the Crawler is easier!)
$client->request('POST', '/submit', array('name' => 'Fabien'));
Когда я использовал этот пример, контроллер не получил никаких данных формы. Сначала я увидел, что передача ключа массива name в моей ситуации была неправильной, так как мне нужно было имя формы, которое было «табелем учета рабочего времени» в моем коде. Я попробовал что-то вроде:
$client->request('POST', '/timesheet/create', array('timesheet[project]' => '100'));
Но это все равно не сработало. В контроллере я попытался понять, что происходит и что, если что-то получено:
$postData = $request->request->get('timesheet');
$project = $postData['project'];
Это не сработало, и $ project остался пустым. Однако, если бы я использовал следующий код, я получил бы значение:
$project = $request->request->get('timesheet[project]');
Но очевидно, что это не то, что я хочу. По крайней мере, я вижу, что есть некоторые данные POST. Моя последняя попытка заключалась в том, чтобы попробовать следующее в методе тестирования:
$this->crawler = $this->client->request('POST', '/timesheet/create/', array('timesheet' => array(project => '100'));
Итак, я пытаюсь передать массив «расписания» в качестве первого элемента массива параметров запроса. Но при этом я получаю сообщение об ошибке:
Symfony\Component\Form\Exception\UnexpectedTypeException: Expected argument of type "array", "string" given (uncaught exception) at /mnt/hgfs/pmt/src/vendor/symfony/src/Symfony/Component/Form/Form.php line 489
Я был бы очень рад, если бы кто-нибудь мог подробнее рассказать о том, что в «книге» о том, как я должен заставить это работать.
Привязка формы в контроллере:
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$postData = $request->request->get('timesheet');
$project = $postData['project'];
$timesheetmanager = $this->get('wlp_pmt.timesheet_db_access');
$timesheetmanager->editTimesheet($timesheet);
return $this->redirect($this->generateUrl('timesheet_list'));
}
}