Magento 2: comment supprimer une image ou un fichier

9

comment supprimer un fichier ou une image dans magento 2. Je sais que l'utilisation unlink('full file path');supprimera le fichier mais je veux faire magento 2 . condition lorsque l'utilisateur checkedla supprimer checkbox.

Qaisar Satti
la source

Réponses:

15

Question très importante comme dans mon expérience, lors de la soumission d'une extension pour le marché, la validation a généré des erreurs concernant l'utilisation directe d'une telle méthode. J'ai recherché et trouvé la solution suivante.

injectez ceci \Magento\Framework\Filesystem\Driver\File $filedans votre constructeur

(assurez-vous de déclarer la variable au niveau de la classe, c'est-à-dire protected $_file;)

et puis vous pouvez avoir accès aux méthodes qui comprennent: isExistsetdeleteFile

par exemple: dans constructeur

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

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

puis dans la méthode où vous essayez de supprimer un fichier:

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

J'espère que cela t'aides.

RT
la source
comment obtenir un chemin absolu alors?
Qaisar Satti
permettez-moi de modifier la réponse.
RT
2
Il fonctionne comme un charme !!
Nalin Savaliya
6

La réponse de RT est bonne, mais nous ne devons pas utiliser l' ObjectManager directement dans l'exemple.

La raison en est ici " Magento 2: utiliser ou ne pas utiliser directement l'ObjectManager ".

Un meilleur exemple est donc ci-dessous:

<?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
la source