Magento 2: как удалить изображение или файл

9

как удалить файл или изображение в magento 2. Я знаю, с помощью unlink('full file path');удалит файл, но я хочу сделать magento 2 пути . условие, когда пользователь checkedудаляет checkbox.

Кайсар Сатти
источник

Ответы:

15

Очень важный вопрос, так как, по моему опыту, при представлении расширения для торговой площадки, проверка вызвала ошибки, связанные с использованием такого метода напрямую. Я исследовал и нашел следующее решение.

добавить это \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
источник
как получить абсолютный путь тогда?
Кайсар Сатти
позвольте мне отредактировать ответ.
RT
2
Работает как часы !!
Налин Савалия,
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
    }
}
Ключ Шан
источник