我正在努力在我的网站上上传.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。
感谢您的帮助。
答案 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
}