symfony - 作为表单的一部分上传的文件不是 Symfony 4 中请求的一部分
问题描述
我创建的表单包含一个用于上传文件的上传字段。该文件可以是任何格式。表单本身是在 FormType 内部创建的,并且控制器会成功处理表单的提交。但是,每次我将表单提交到此控制器并执行print_r
orvar_dump()
时,上传字段都不包含在 POST 请求的参数中。当我使用它时$file = $request->files->get('estimateUpload');
,var_dump()
它只会返回NULL
。
这是我正在使用的表单类型:
<?php
namespace App\Form;
use App\Entity\IhcVehicleDamageMatrix;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\File;
class IhcVehicleDamageEntryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('id')
->add('incidentId')
->add('vehicleDamageId')
->add('damageType')
->add('description')
->add('wheelTyreDamage')
->add('tyreAge')
->add('tyreDotCode')
->add('treadDepth')
->add('renumerationCost')
->add('itemAge')
->add('created')
->add('modified')
->add('estimateUpload', FileType::class, [
'required' => false
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => IhcVehicleDamageMatrix::class,
]);
}
}
在视图文件中,这是我使用上传字段的方式:
{{ form_start(damageForm, {'action': path('forms_ihc_damage_details_submitform'), 'method': 'POST', 'attr': {'id': 'ihcFormDamageDetails', 'enctype': 'multipart/form-data'}}) }}
{{ form_row(damageForm._token) }}
<tr>
<th>Upload Estimate</th>
<td>
{{ form_widget(damageForm.estimateUpload) }}
<small>{{ form_help(damageForm.estimateUpload) }}</small>
<div class="form-error">
{{ form_errors(damageForm.estimateUpload) }}
</div>
</td>
</tr>
{{ form_errors(damageForm) }}
{{ form_end(damageForm, {'render_rest': false}) }}
在控制器中,这就是我获取表单数据的方式:
public function vehicleDamageForm(Request $request)
{
// Get Form Details
$formdet = $request->get('ihc_vehicle_damage_entry');
$em = $this->getDoctrine()->getManager();
$file = $request->files->get('estimateUpload');
var_dump($file);
}
解决方案
更好的方法是estimateUpload
直接从IhcVehicleDamageMatrix
. 在控制器内部尝试这样的事情:
$ihcVehicleDamageMatrix = new IhcVehicleDamageMatrix();
$form = $this->createForm(IhcVehicleDamageEntryType::class, $ihcVehicleDamageMatrix);
if ($form->isSubmitted() && $form->isValid()) {
$file = $ihcVehicleDamageMatrix->estimateUpload();
dump($file);
}
推荐阅读
- swift - 当我创建一个 segue 以注销时,一个导航控制器突然出现 - Swift
- x86 - 有没有办法确定发生了 SMM 中断?
- spring - 异常连接被拒绝
- c++11 - 具有自定义键类型的 std::unordered_set 允许插入重复键
- java - Android如何限制单个应用实例?
- proof - 在 Idris 中为决策函数构建证明
- linux - 未知错误:在 ubuntu 上执行 Selenium UI 测试用例时,DevToolsActivePort 文件不存在错误
- angular - 迁移旧的角度项目时不兼容的对等依赖关系
- java - 如何在奇数索引处用“*”替换字符,否则用“+”替换
- java - Android:是否可以创建一个通知对象来调用?(而不是每次都写一个方法)