首页 > 解决方案 > Symfony 使用表单上传文件

问题描述

我正在使用 Symfony 3.4.8,并尝试创建一个用于上传文件的表单。我完全按照Symfony 文档的步骤进行操作,但出现错误:

Controller "AppBundle\Report::uploadReport()" requires that you provide a value for the "$fileUploader" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one.

这是我的代码的一部分,除了我更改了类名之外,其余部分与文档中的相同。显然,当函数被调用时,没有FileUploader参数传递给函数。如果我删除参数FileUploader $fileUploader,页面可以加载而不会引发异常,但它不会获取文件。我是 Symfony 的新手,我该如何解决这个问题?

/**
 * @Route("/report/create-report/upload/", name="report_create")
 */
public function uploadReport(Request $request, FileUploader $fileUploader)
{
    $report = new Report();
    $form = $this->createForm(ReportType::class, $report);
    $form->add('submit', SubmitType::class);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // $file stores the uploaded PDF file
        /** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */
        $file = $report->getReport();

        $fileName = $fileUploader->upload($file);
        $report->setBrochure($fileName);
        //$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();

        // moves the file to the directory where brochures are stored
        //$file->move(
        //    $this->getParameter('reports_directory'),
        //    $fileName
        //);

        // updates the 'brochure' property to store the PDF file name
        // instead of its contents
        //$report->setReport($fileName);

        // ... persist the $product variable or any other work
    }
    return $this->render('report/createReport.html.twig', array(
        'form' => $form->createView(),
    ));
}

我看过这篇文章,但由于没有这样的变量,我无法得到最终的答案$container

最后更新:我放弃了尝试从头开始上传。我使用了推荐的捆绑包,使其以最少的编码量工作。

标签: phpsymfony

解决方案


FileUploader.php 服务的参数brochures_directory似乎是空的。您是否在 service.yml 中指定了它?您是否也将它添加到您的 config.yml 中?

然后你在更改后清除了 symfony 缓存吗?


推荐阅读