Функциональный тест Symfony2: передача данных формы напрямую

Я использую 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'));
        }
    }
6
задан DanF7 26 January 2012 в 08:12
поделиться