2

我有一个带有 supprimer 动作的控制器。

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

当我按照 Symfony 文档创建上传文件时,我也在我的 services.yml 中创建了这条路线

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

我的问题

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

2 回答 2

2

可能是由于路径名拼写错误?

$path='%kernel.project_dir%/public/uploads/LettresSoumissioNs/'.$lettresoumission;

缺少一个 N 字母。

于 2019-04-29T14:48:25.810 回答
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'

这不是服务或路由声明,这只是一个参数 => 值映射。

于 2019-04-29T14:57:33.857 回答