关于Symfony 4上传文档的困惑

时间:2018-03-11 19:48:10

标签: symfony file-upload

我正在学习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实体新创建的。

2 个答案:

答案 0 :(得分:1)

在您的控制器中,您生成一个带有基础对象的表单,用于存储数据,即产品实体。可以通过两种方式访问​​控制器。

首先在没有任何表单数据的GET方法中,然后在POST方法中使用表单字段中的数据。在Symfony中,表单字段中的数据将自动放入您的实体中,甚至自动验证。这一切都发生在

$form->handleRequest($request);

因此,上传的文件数据也存储在实体中,如果您想访问它,则必须通过公共方法(例如$ product-> getBrochure();

)将其从实体中删除。

答案 1 :(得分:1)

Symfony 4文件上传页面中的文档似乎不正确。这对你来说可能有点晚,但问题仍然存在。 而不是使用:

$file = $product->getBrochure();

使用:

$file = $form['brochure']->getData();

第一个将返回文件名,这是一个字符串,而第二个将获得实际文件。