Magento 2: como borrar una imagen o archivo

9

cómo eliminar un archivo o una imagen en magento 2. Sé que el uso unlink('full file path');eliminará el archivo, pero quiero hacer magento de 2 maneras . condición cuando el usuario checkedla elimina checkbox.

Qaisar Satti
fuente

Respuestas:

15

Pregunta muy importante, como en mi experiencia, al enviar una extensión para el mercado, la validación generó errores con respecto al uso de dicho método directamente. Investigué y encontré la siguiente solución.

inyecta esto \Magento\Framework\Filesystem\Driver\File $fileen tu constructor

(asegúrese de declarar la variable de nivel de clase, es decir, protected $_file;)

y luego puede tener acceso a los métodos que incluyen: isExistsydeleteFile

por ejemplo: en constructor

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

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

y luego en el método en el que intentas eliminar un archivo:

$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 esto ayude.

RT
fuente
¿Cómo obtener el camino absoluto entonces?
Qaisar Satti
déjame editar la respuesta.
RT
2
Funciona a las mil maravillas !!
Nalin Savaliya
6

La respuesta de RT es buena, pero no debemos usar ObjectManager directamente en el ejemplo.

La razón está aquí " Magento 2: usar o no usar el ObjectManager directamente ".

Entonces, el mejor ejemplo es el siguiente:

<?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
fuente