Удалить файл из папки в Symfony 4 - PullRequest
1 голос
/ 29 апреля 2019

У меня есть контроллер с действием surimer.

Я могу добавлять файлы и удалять их из базы данных.

Когда я следовал за документом Symfony, чтобы создать файл загрузчика, я также создал в моих services.yml этот маршрут

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

Моя проблема

Когда я удаляю свой файл с помощью действия supprimer, хорошо, что он удаляет его в моей базе данных. Но не в моей папке / public / uploads / LettresSoumissions. Я пытался найти способ удалить их в своей папке, но не смог.

Я пытался также с помощью файловой системы () удалить их, но я, должно быть, написал это плохо.

Вот мое действие в классе моего контроллера

/**
     * @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 ]

2 голосов
/ 29 апреля 2019

Ваша проблема в этой строке:

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

Приведенный выше параметр представляет собой просто строку со значением:

% kernel.project_dir%

Вам нужен способ получить значение параметра.

Чистым способом было бы ввести значение параметра в контроллер.

Определите свой контроллер как службу в вашем сервисе. Yaml:

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;

уточнить:

Вы сказали:

Я также создал в своих службах. Этот маршрут

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

Это не объявление сервиса или маршрута, это просто отображение параметра => значения.

1 голос
/ 29 апреля 2019

Может ли это быть из-за неправильного ввода имени пути?

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

Отсутствует буква N.

...