Magento 2: Löschen von Bildern oder Dateien

9

So löschen Sie Dateien oder Bilder in Magento 2. Ich weiß, unlink('full file path');dass die Datei mit Magento 2 gelöscht wird . Bedingung beim Benutzer checkeddas Löschen checkbox.

Qaisar Satti
quelle

Antworten:

15

Sehr wichtige Frage, da meiner Erfahrung nach bei der Einreichung einer Erweiterung für den Markt die Validierung Fehler bei der direkten Verwendung dieser Methode verursachte. Ich habe folgende Lösung recherchiert und gefunden.

Injizieren Sie dies \Magento\Framework\Filesystem\Driver\File $filein Ihren Konstruktor

(Stellen Sie sicher, dass Sie die Variable auf Klassenebene deklarieren, dh protected $_file;)

und dann können Sie auf die Methoden zugreifen, die Folgendes umfassen: isExistsunddeleteFile

Zum Beispiel: im Konstruktor

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

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

und dann in der Methode, in der Sie versuchen, eine Datei zu löschen:

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

hoffe das hilft.

RT
quelle
Wie komme ich dann zum absoluten Pfad?
Qaisar Satti
Lassen Sie mich die Antwort bearbeiten.
RT
2
Es wirkt wie ein Zauber !!
Nalin Savaliya
6

Die Antwort von RT ist gut, aber wir sollten den ObjectManager nicht direkt im Beispiel verwenden.

Der Grund ist hier " Magento 2: den ObjectManager direkt verwenden oder nicht verwenden ".

Ein besseres Beispiel finden Sie unten:

<?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
    }
}
Schlüssel Shang
quelle