我已经按照Symfony 5.2教程添加了一个FileUploader作为服务(https://symfony.com/doc/current/controller/upload_file.html)。
这就是我的服务yaml
parameters:
targetDirectory: '%kernel.project_dir%/public/uploads/'
previews_video: '%kernel.project_dir%/public/uploads/previews'
brochures_directory: '%kernel.project_dir%/public/uploads/brochures'
services:
App\Service\FileUploader:
arguments:
$targetDirectory: '%previews_video%'
这是我的文件上传器.php
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\String\Slugger\SluggerInterface;
class FileUploader
{
private $targetDirectory;
private $slugger;
public function __construct($targetDirectory, SluggerInterface $slugger)
{
$this->targetDirectory = $targetDirectory;
$this->slugger = $slugger;
}
public function upload(UploadedFile $file)
{
$originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $this->slugger->slug($originalFilename);
$fileName = $safeFilename.'-'.uniqid().'.'.$file->guessExtension();
try {
$file->move($this->getTargetDirectory(), $fileName);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
return $fileName;
}
public function getTargetDirectory()
{
return $this->targetDirectory;
}
}
但我有一个常见的错误:
无法解析“应用程序\控制器\视频控制器::edit()"的参数$fileUploader:无法自动连接服务“应用程序\服务\文件上传程序”:方法“__construct()”的参数“$targetDirectory”没有类型提示,您应该显式配置其值。
由该控制器调用:
/**
* @Route("/{id}/edit", name="video_edit", methods={"GET","POST"})
* @param Request $request
* @param Video $video
* @param FileUploader $fileUploader
* @return Response
*/
public function edit(Request $request, Video $video, FileUploader $fileUploader): Response
{...}
我该如何解决这个问题?我尝试删除字符串类型,添加字符串类型,从services. yaml中的targetDirectory参数中删除**$**...
5条答案
按热度按时间j0pj023g1#
看看我正在工作的services.yaml。我已经更改了名称空间
应用程序\服务
到
应用程序\服务
而且我还在文件的末尾添加了服务声明。
看起来services中的行的顺序很重要。首先,我在services部分的顶部添加了声明,但是autowiring是在后面声明的,我猜错误就在这里...
u4vypkhs2#
您应该将自动装配配置添加到服务文件中:
gwo2fgha3#
在构造函数中为
$targetDirectory
添加类型提示string
31moq8wy4#
我也遇到过同样的问题,就是那个服务的缩进问题,我没有遇到缩进错误,但是自动连线也不行,我就加了4个空格作为缩进
vwhgwdsa5#
是的,我也遇到了这个问题,我设法解决了它,通过在services.yaml文件中用空格替换缩进,我在同一个根中添加了所有这些属性,然后我这样做了,它对我很有效:
如果你(和其他遇到这个问题的人)很纠结,可以试试这个解决方案,我不保证它100%有效。