我正在学习Symfony 4,我在控制器页面中看到了关于文件上传的文档,我感到很困惑。
public function new(Request $request)
{
$product = new Product();
$form = $this->createForm(ProductType::class, $product);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $file stores the uploaded PDF file
/** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */
$file = $product->getBrochure();
在表单提交时, $ file 用于存储注释指定的上载文件的内容。但是这个 $ product-> getBrochure()的重点是什么? $ product 应该没有任何内容,因为它是从Product实体新创建的。
答案 0 :(得分:1)
在您的控制器中,您生成一个带有基础对象的表单,用于存储数据,即产品实体。可以通过两种方式访问控制器。
首先在没有任何表单数据的GET方法中,然后在POST方法中使用表单字段中的数据。在Symfony中,表单字段中的数据将自动放入您的实体中,甚至自动验证。这一切都发生在
行$form->handleRequest($request);
因此,上传的文件数据也存储在实体中,如果您想访问它,则必须通过公共方法(例如$ product-> getBrochure();
)将其从实体中删除。答案 1 :(得分:1)
Symfony 4文件上传页面中的文档似乎不正确。这对你来说可能有点晚,但问题仍然存在。 而不是使用:
$file = $product->getBrochure();
使用:
$file = $form['brochure']->getData();
第一个将返回文件名,这是一个字符串,而第二个将获得实际文件。