2014-01-13 2 views
0

Я унаследовал приложение, которое, судя по всему, существовало до того, как существовал создатель формы. Разработчик вроде сворачивал свой собственный с макросами. Теперь я хочу, чтобы добавить загрузку файлов на некоторые существующие формы, но я получаю то, что, как представляется, хорошо известная ошибка:Как отключить ввод файла без использования построителя форм?

Был 1 ошибка:

myBundle\Tests\Controller\snip\DefaultControllerUnitTest::testCanStoreDocumentAtS3 Exception: Serialization of 'Symfony\Component\HttpFoundation\File\UploadedFile' is not allowed

C:\apath\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\DataCollector\DataCollector.php:27

C:\apath\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Profiler\Profiler.php:218

Решения является отменить отображение поля файла:

$ builder-> add ('pic', 'file'); к этому:

$builder->add('pic','file', array('mapped'=>false)); 

Но в этом случае строитель не используется. Вместо этого он выглядит следующим образом:

{# file(name, value) #} 
{% macro file(name, value) %} 
    <input type="file" name="{{ name }}" id="{{ name }}" value="{{ value }}" /> 
{% endmacro %} 

Что я могу добавить к этому макросу, или же в действии контроллера, чтобы сохранить Profiler от сериализации это?

ответ

1

Ответ был частично ошибкой пилота, но здесь достаточно многого, и я надеюсь, что смогу помочь другим избежать такой же ловушки.

Эта ошибка была инициирована модульным тестом, в котором я моделировал загрузку файла вместе с другими параметрами. Первоначально код, вызвавший эту ошибку, был:

$photo = new UploadedFile(
    __DIR__ . '/TestReportMethod.xlsx', 
    'TestReportMethod.xlsx', 
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
    123 
); 
.... 
$form['reportFile'] = $photo; 
//submit 

Это вызвало ошибку в исходном сообщении.

Попытавшись несколько вещей, я перешел к этой форме.

$crawler = $this->client->request('POST', 
    $url, 
    array('id' => 328), 
    array('agencyInfoId' => 328), 
    array('reportFile' => $photo) 
); 

Что вызывает InvalidArgumentException я думаю, что могло бы предотвратить немного лучший пример в поваренной книге. Правильная форма должна быть массивом значений параметров, а затем массив файлов:

$crawler = $this->client->request('POST', 
    $url, 
    array('id' => 328, 
     'agencyInfoId' => 328), 
    array('reportFile' => $photo) 
); 

Я надеюсь, что это помогает кто-то другой!

Смежные вопросы