Magento 2: como excluir imagem ou arquivo

9

como excluir arquivo ou imagem no magento 2. Eu sei que o uso unlink('full file path');excluirá o arquivo, mas eu quero fazer o magento 2 way . condição quando o usuário checkedexcluir checkbox.

Qaisar Satti
fonte

Respostas:

15

Pergunta muito importante, como na minha experiência, ao enviar uma extensão para o marketplace, a validação gerou erros em relação ao uso desse método diretamente. Eu pesquisei e encontrei a seguinte solução.

injete isso \Magento\Framework\Filesystem\Driver\File $fileno seu construtor

(certifique-se de declarar variável no nível da classe, ou seja, protected $_file;)

e então você pode ter acesso aos métodos que incluem: isExistsedeleteFile

por exemplo: no construtor

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

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

e depois no método em que você está tentando excluir um arquivo:

$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);
}

espero que isto ajude.

RT
fonte
como obter caminho absoluto, então?
Qaisar Satti
deixe-me editar a resposta.
RT
2
Ele funciona como um encanto !!
Nalin Savaliya 29/11
6

A resposta do RT é boa, mas não devemos usar o ObjectManager diretamente no exemplo.

O motivo está aqui " Magento 2: usar ou não usar o ObjectManager diretamente ".

Então, um exemplo melhor está abaixo:

<?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
    }
}
Key Shang
fonte