Magento 2:画像またはファイルを削除する方法


9

magento 2でファイルまたは画像を削除する方法を使用します。使用unlink('full file path');するとファイルが削除されることがわかっていますが、magento 2で実行したいと思います。ユーザーcheckedが削除したときの状態 checkbox

回答:


15

私の経験のように非常に重要な質問です。マーケットプレイスの拡張機能を送信すると、検証により、このようなメソッドの直接使用に関するエラーが生成されました。私は調査し、次の解決策を見つけました。

これ\Magento\Framework\Filesystem\Driver\File $fileをコンストラクタに注入します

(クラスレベル変数、つまりprotected $_file;)を宣言してください。

そして、あなたは以下を含むメソッドにアクセスすることができます:isExistsそしてdeleteFile

例:コンストラクター

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

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

そして、あなたがファイルを削除しようとしているメソッドで:

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

お役に立てれば。


では、絶対パスを取得する方法は?
Qaisar Satti、

回答を編集させてください。
RT 2016

2
それは魅力のように働きます!!
Nalin Savaliya

6

RTの答えは適切ですが、この例ではObjectManagerを直接使用しないください

「理由はここにある:直接のObjectManagerを使用するように使用するか、しないようにMagentoの2は、」。

より良い例は以下の通りです:

<?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
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.