Symfony下载后删除文件

jrs*_*gtr 2 php symfony

我正在开发一个Symfony应用程序,用户可以使用它来裁剪图像.有人下载了裁剪后的图像,我希望应用程序将其从服务器中删除.

我目前有这个控制器动作:

/**
 * @Route(
 *      "/download/{crop_id}",
 *      name="download_cropped",
 *      options={"expose"=true}
 * )
 *
 * @ParamConverter(
 *      "crop",
 *      class="WebwijsCropperBundle:Crop",
 *      options={"id" = "crop_id"}
 * )
 *
 */
public function downloadAction(Crop $crop)
{
    $dir = $this->container->getParameter('image.cropped.dir');
    return new BinaryFileResponse($dir . '/' . $crop->getCroppedFile());
}
Run Code Online (Sandbox Code Playgroud)

我创建了这个EventListener,我想在发送响应后删除图像.每次响应后都会触发此监听器.

因此,如果响应来自正确的控制器操作,如何获取我需要知道的信息.我怎样才能获得crop_id参数,以便知道要删除哪个文件?

class FileRemovalListener
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function onKernelTerminate(PostResponseEvent $event)
    {
        $response = $event->getResponse();
        $request = $event->getRequest();
        // what do i have to do here to know 
        // from which controller action the response comes?

    }
}
Run Code Online (Sandbox Code Playgroud)

这是services.yml中的服务定义

WebwijsCropperBundle\EventListener\FileRemovalListener:
        tags:
            - { name: kernel.event_listener, event: kernel.terminate, method: onKernelTerminate }
Run Code Online (Sandbox Code Playgroud)

小智 10

如果您只想删除该文件,请尝试以下操作:

public function downloadAction(Crop $crop)
{
    $dir = $this->container->getParameter('image.cropped.dir');
    $response = new BinaryFileResponse($dir . '/' . $crop->getCroppedFile());

    $response->deleteFileAfterSend(true);

    return $response;
}
Run Code Online (Sandbox Code Playgroud)