我有一个具有禁止操作的控制器。
我可以添加文件并将其从数据库中删除。
当我按照Symfony文档创建上传器文件时,我也在我的services.yml中创建了此路由
parameters:
repertoire_soumissions: '%kernel.project_dir%/public/uploads/LettresSoumissios'
我的问题
当我使用超级操作删除文件时,可以在数据库中删除它。但不在我的文件夹/ public / uploads / LettresSoumissions中。我试图找到一种方法也可以将其删除,但无法成功。
我也尝试使用Filesystem()删除它们,但是我一定写得不好。
这是我在控制器类中的动作
/**
* @Route("admin/soumission/{id}/supprimer", name="supprimer_soumission")
*/
public function supprimerSoumission(Soumission $soumission, ObjectManager $manager){
$lettresoumission= $soumission->getLettreSoumission();
$filesystem = new Filesystem();
$path='%kernel.project_dir%/public/uploads/LettresSoumissios/'.$lettresoumission;
$filesystem->remove($path);
$manager->remove($soumission);
$manager->flush();
$this->addFlash('success','Soumission supprimer !!');
return $this->redirectToRoute('soumission');
}
答案 0 :(得分:2)
您的问题是这一行:
$path='%kernel.project_dir%/public/uploads/LettresSoumissios/'.$lettresoumission;
上面的参数只是一个带有值的字符串:
%kernel.project_dir%
您需要一种检索参数值的方法。
一种干净的方法是将参数值注入控制器中。
在您的service.yaml中将Controller定义为服务:
Namespace\NameOfTheController:
arguments:
- '%kernel.project_dir%'
tags: [controller.service_arguments]
将值注入到控制器的构造函数中:
private $kernelRoot;
public function __construct(string $kernelRoot)
{
$this->kernelRoot = $kernelRoot;
}
现在将您的代码行更改为:
$path=$this->kernelRoot.'/public/uploads/LettresSoumissios/'.$lettresoumission;
进行澄清:
您说:
我也在此路线的services.yml中创建了
parameters:
repertoire_soumissions: '%kernel.project_dir%/public/uploads/LettresSoumissios'
这不是服务或路由声明,这只是一个参数=>值映射。
答案 1 :(得分:1)
可能是由于路径名拼写错误造成的吗?
$path='%kernel.project_dir%/public/uploads/LettresSoumissioNs/'.$lettresoumission;
缺少N个字母。