Magento 2: come eliminare immagine o file


9

come eliminare il file o l'immagine in magento 2. So che usando unlink('full file path');eliminerai il file ma voglio fare magento in 2 modi . condizione quando l'utente checkedelimina checkbox.

Risposte:


15

Domanda molto importante come nella mia esperienza, quando ho presentato un'estensione per il marketplace, la convalida ha generato errori relativi all'utilizzo diretto di tale metodo. Ho studiato e trovato la seguente soluzione.

iniettalo \Magento\Framework\Filesystem\Driver\File $filenel tuo costruttore

(assicurati di dichiarare la variabile di livello di classe, cioè, protected $_file;)

e quindi puoi avere accesso ai metodi che includono: isExistsedeleteFile

per esempio: nel costruttore

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

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

e quindi nel metodo in cui stai cercando di eliminare un file:

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

spero che sia di aiuto.


come ottenere il percorso assoluto allora?
Qaisar Satti,

lasciami modificare la risposta.
RT,

2
Esso funziona magicamente !!
Nalin Savaliya,

6

La risposta di RT è buona, ma non dovremmo usare l' ObjectManager direttamente nell'esempio.

Il motivo è qui " Magento 2: utilizzare o non utilizzare direttamente l'ObjectManager ".

Quindi un esempio migliore è di seguito:

<?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
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.