表单中的Symfony2 FileType输入始终返回null

时间:2016-09-16 13:56:18

标签: php symfony twig symfony-forms

我正在努力在我的网站上上传.pdf文件。

我创建了一个实体,其中包含字符串中文件的名称。 有实体映射:

<field name="pdf" type="string" column="pdf" length="200" nullable="true"/>

我输入文件的表单:

$builder
        ->add('pdf', FileType::class, array('label' => 'Fiche de paie'))
        /* other input */
    ;

我的表格观点:

{{ form_start(form) }}
    {{ form_row(form._token) }}
    <div class="modal-body row">
        <div class="col-md-6 col-sm-8">
            /* other input */
            {{ form_row(form.pdf) }}}
        </div>
        <div class="col-md-6 col-sm-8">
            /* other input */
        </div>
    </div>

    <div class="modal-footer">
        <button type="button" class="btn btn-info" id="save">{% trans %}Save{% endtrans %}</button>
    </div>
    {{ form_end(form, { 'render_rest': false } ) }}

还有控制器:

if ($form->isSubmitted() && $form->isValid()) {
        $pdf = $salaire->getPdf();

        if ($pdf == null) { /* Always true */
            $salaire->setPdf('test');
        }

        /* operations to extract the file name and set it to the pdf variable in salaire */

        $em->persist($salaire);
        $em->flush();

        return $this->redirectToRoute('salaires_index', array("id" => $remuneration->getId()));
    }

问题在于即使我输入文件,当我用

获取输入值时
->salaire->getPdf()

结果始终为null。

首先我认为这是因为我在我的实体中的字符串上设置了表单输入FileType,但我试图在我的实体中的UploadedFile变量上设置它,结果仍为null。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

请务必设置表单元素的正确enctype(在表单标记中为值enctype="multipart/form-data")。

参考documentation,您可以执行以下操作:

{{ form_start(form, {'multipart': true}) }}

希望这个帮助

答案 1 :(得分:0)

我有类似的问题。上传的文件始终为空值。我发现控制器的表单处理不正确。

最初我有这样的事情:

if ($request->isMethod('POST')) {
    $form->submit($request->request->get($form->getName()));
    if ($form->isSubmitted() && $form->isValid()) {
    // handle form data
    }
}

所有其他字段都提供了它们的值,因此它一直有效,直到我添加了FileType元素。这解决了问题:

$form->handleRequest($request);  // This bit was important
if ($form->isSubmitted() && $form->isValid()) {
// handle form data
}