Magento 2: วิธีลบภาพหรือไฟล์


9

วิธีการลบไฟล์หรือรูปภาพในวีโอไอพี 2. ฉันรู้ว่าการใช้unlink('full file path');จะลบไฟล์ แต่ผมต้องการที่จะทำวีโอไอพี 2 วิธี สภาพเมื่อผู้ใช้ ลบcheckedcheckbox

คำตอบ:


15

คำถามที่สำคัญมากเช่นเดียวกับในประสบการณ์ของฉันเมื่อส่งส่วนขยายสำหรับตลาดการตรวจสอบสร้างข้อผิดพลาดเกี่ยวกับการใช้วิธีการดังกล่าวโดยตรง ฉันค้นคว้าและพบวิธีแก้ปัญหาต่อไปนี้แล้ว

ฉีดนี้\Magento\Framework\Filesystem\Driver\File $fileในตัวสร้างของคุณ

(ตรวจสอบให้แน่ใจว่าประกาศตัวแปรระดับชั้นเช่นprotected $_file;)

และจากนั้นคุณสามารถเข้าถึงวิธีการซึ่งรวมถึง: isExistsและdeleteFile

ตัวอย่างเช่น: in constructor

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

2
มันใช้งานได้เหมือนมีเสน่ห์ !!
Nalin Savaliya

6

คำตอบของ RT นั้นดี แต่เราไม่ควรใช้ObjectManagerโดยตรงในตัวอย่าง

เหตุผลอยู่ที่นี่ " Magento 2: การใช้หรือไม่ใช้ ObjectManager โดยตรง "

ตัวอย่างที่ดีกว่าอยู่ด้านล่าง:

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