从symfony 4中的文件夹中删除文件

时间:2019-04-29 14:40:18

标签: php symfony symfony-4.2

我有一个具有禁止操作的控制器。

我可以添加文件并将其从数据库中删除。

当我按照Symfony文档创建上传器文件时,我也在我的services.yml中创建了此路由

parameters:
 repertoire_soumissions: '%kernel.project_dir%/public/uploads/LettresSoumissios'

我的问题

当我使用超级操作删除文件时,可以在数据库中删除它。但不在我的文件夹/ p​​ublic / 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');
    }

2 个答案:

答案 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个字母。