답변:
내 경험에서와 같이 매우 중요한 질문은 시장 확장을 제출할 때 해당 방법의 사용과 관련하여 오류를 생성 한 것입니다. 나는 다음 해결책을 연구하고 발견했다.
이것을 \Magento\Framework\Filesystem\Driver\File $file
생성자에 주입 하십시오
(선언 클래스 수준 변수에 있는지 확인 즉, protected $_file;
)
다음은 포함하는 방법에 액세스 할 수 있습니다 isExists
및deleteFile
예를 들어 : 생성자에서
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);
}
도움이 되었기를 바랍니다.
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
}
}