마 젠토 2 : 이미지 또는 파일을 삭제하는 방법


9

magento 2에서 파일 또는 이미지를 삭제하는 방법 파일을 삭제한다는 것을 알고 unlink('full file path');있지만 magento 2 way을 하고 싶습니다 . 사용자 checked삭제 시 조건 checkbox.

답변:


15

내 경험에서와 같이 매우 중요한 질문은 시장 확장을 제출할 때 해당 방법의 사용과 관련하여 오류를 생성 한 것입니다. 나는 다음 해결책을 연구하고 발견했다.

이것을 \Magento\Framework\Filesystem\Driver\File $file생성자에 주입 하십시오

(선언 클래스 수준 변수에 있는지 확인 즉, protected $_file;)

다음은 포함하는 방법에 액세스 할 수 있습니다 isExistsdeleteFile

예를 들어 : 생성자에서

public function __construct(\Magento\Backend\App\Action\Context $context, 
            \Magento\Framework\Filesystem\Driver\File $file){

        $this->_file = $file;
        parent::__construct($context);
}

그런 다음 파일을 삭제하려는 방법에서 :

$mediaDirectory = $this->_objectManager->get('Magento\Framework\Filesystem')->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA);
$mediaRootDir = $mediaDirectory->getAbsolutePath();

if ($this->_file->isExists($mediaRootDir . $fileName))  {

    $this->_file->deleteFile($mediaRootDir . $fileName);
}

도움이 되었기를 바랍니다.


그렇다면 절대 경로를 얻는 방법?
Qaisar Satti

답을 편집하겠습니다.
RT

2
그것은 매력처럼 작동합니다!
Nalin Savaliya

6

RT의 대답은 좋지만 예제에서 ObjectManager를 직접 사용 해서는 안됩니다 .

그 이유는 " Magento 2 : ObjectManager를 직접 사용하거나 사용하지 않기 "입니다.

더 좋은 예는 다음과 같습니다.

<?php
namespace YourNamespace;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Filesystem\Driver\File;
use Magento\Framework\Filesystem;
use Magento\Framework\App\Filesystem\DirectoryList;

class Delete extends Action
{

    protected $_filesystem;
    protected $_file;

    public function __construct(
        Context $context,
        Filesystem $_filesystem,
        File $file
    )
    {
        parent::__construct($context);
        $this->_filesystem = $_filesystem;
        $this->_file = $file;
    }

    public function execute()
    {
        $fileName = "imageName";// replace this with some codes to get the $fileName
        $mediaRootDir = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath();
        if ($this->_file->isExists($mediaRootDir . $fileName)) {
            $this->_file->deleteFile($mediaRootDir . $fileName);
        }
        // other logic codes
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.