รีเฟรชแคชโดยทางโปรแกรมใน Magento 2 ที่ระบบหน้าต่าง


12

ฉันกำลังมองหารหัสที่สามารถรีเฟรชหรือล้างแคช Magento2 ผ่านสคริปต์ได้

มันง่ายมากใน Magento 1.x

ฉันใช้ Magento2 บนเซิร์ฟเวอร์ WAMP (หน้าต่าง)

คำตอบ:


2

@ ปฏิเสธพูดโดยใช้ cmd คุณสามารถล้างแคช แต่ปัญหาของคุณที่บรรทัดคำสั่ง php

ในการใช้งานไคลเอนต์ php เป็นคำสั่งในหน้าต่างคุณ จำเป็นต้องตั้งค่า php เป็นสภาพแวดล้อมที่มีอยู่ วิธีการตั้งค่าตัวแปร env สำหรับ PHP?

หลังจากนั้นคุณสามารถเรียกใช้คำสั่ง magento 2 cli จาก cmd like ได้

php bin/magento cache:clean
php bin/magento cache:flush
           Or
php bin/magento c:c
php bin/magento c:f

ไปที่ที่ตั้งโครงการของคุณจาก cmd


เช่นเดียวกับสิ่งที่เป็นขั้นตอนสำหรับวีโอไอพี 1
ZUS

23

โค้ดด้านล่างล้างแคชโดยทางโปรแกรม มันทำงานได้ดีสำหรับฉัน

กรณีที่ 1: นอก Magento

use Magento\Framework\App\Bootstrap;
include('../app/bootstrap.php');
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();


try{
    $_cacheTypeList = $objectManager->create('Magento\Framework\App\Cache\TypeListInterface');
    $_cacheFrontendPool = $objectManager->create('Magento\Framework\App\Cache\Frontend\Pool');
    $types = array('config','layout','block_html','collections','reflection','db_ddl','eav','config_integration','config_integration_api','full_page','translate','config_webservice');
    foreach ($types as $type) {
        $_cacheTypeList->cleanType($type);
    }
    foreach ($_cacheFrontendPool as $cacheFrontend) {
        $cacheFrontend->getBackend()->clean();
    }
}catch(Exception $e){
    echo $msg = 'Error : '.$e->getMessage();die();
}

กรณีที่ 2: Inside Magento

public function __construct(
    Context $context,
    \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
    \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool
) {
    parent::__construct($context);
    $this->_cacheTypeList = $cacheTypeList;
    $this->_cacheFrontendPool = $cacheFrontendPool;
}


$types = array('config','layout','block_html','collections','reflection','db_ddl','eav','config_integration','config_integration_api','full_page','translate','config_webservice');
foreach ($types as $type) {
    $this->_cacheTypeList->cleanType($type);
}
foreach ($this->_cacheFrontendPool as $cacheFrontend) {
    $cacheFrontend->getBackend()->clean();
}

หากต้องการทำความสะอาดแคชเฉพาะของstackoverflow.com/a/42636405/3733214
Gediminas

16

การเข้ารหัสประเภทเป็นความคิดที่ไม่ดี คุณสามารถใช้วิธีการเดียวกับที่ใช้โดยคำสั่งcache:flushและ cache:cleanคลาสตัวจัดการแคชยังสามารถดึงประเภทแคชทั้งหมดให้คุณได้ตามตัวอย่างด้านล่าง

public function __construct(
    \Magento\Framework\App\Cache\Manager $cacheManager
) {
    $this->cacheManager = $cacheManager;
}

private function whereYouNeedToCleanCache()
{
    $this->cacheManager->flush($this->cacheManager->getAvailableTypes());

    // or this
    $this->cacheManager->clean($this->cacheManager->getAvailableTypes());
}

2

เพื่อเพิ่มคำตอบของ denish คุณสามารถเขียน php script เล็กน้อยแล้ววางลงในโฟลเดอร์ root ของ magento:

<?php
    $command = 'php bin/magento cache:clean && php bin/magento cache:flush';
    echo '<pre>' . shell_exec($command) . '</pre>';
?>

สิ่งนี้จะให้ผลลัพธ์เช่น:

Cleaned cache types:
config
layout
block_html
collections
reflection
db_ddl
eav
config_integration
config_integration_api
full_page
translate
config_webservice
Flushed cache types:
config
layout
block_html
collections
reflection
db_ddl
eav
config_integration
config_integration_api
full_page
translate
config_webservice

โปรดตรวจสอบให้แน่ใจว่าคุณสามารถดำเนินการ php ได้จริงจากบรรทัดคำสั่งมิฉะนั้นจะไม่มีประโยชน์ สำหรับ windows คุณต้องตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม php.exe ใน PATH ของคุณในตัวแปรสภาพแวดล้อม โปรดดูhttp://willj.co/2012/10/run-wamp-php-windows-7-command-line/


มันไม่แสดงอะไรเลย
Arunendra

1
สำหรับ windows คุณต้องตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม php.exe ใน PATH ของคุณในตัวแปรสภาพแวดล้อม โปรดดูwillj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam

หากคุณสามารถใช้ shell_exec () สำหรับ PHP แสดงว่าการติดตั้งของคุณไม่ปลอดภัย ฟังก์ชั่นนี้ควรปิดการใช้งานในสภาพแวดล้อมสด
frustratedtech

2

คุณสามารถล้างหรือรีเฟรชแคชทั้งหมดโดยใช้คำสั่งต่อไปนี้

php bin/magento cache:clean   
php bin/magento cache:flush

ฉันหวังว่านี่จะช่วยคุณได้


วิธีทำบนหน้าต่าง
Arunendra

@Arunendra ในรูทวีCLIโอไอพีแบบเปิดจากนั้นป้อนเพื่อล้างแคชphp bin/magento cache:cleanเช่นนี้เพื่อป้อนคำสั่งทั้งหมด ข้อมูลเพิ่มเติมคลิกที่ลิงค์นี้
Bojjaiah

เช่นเดียวกับสิ่งที่เป็นขั้นตอนสำหรับวีโอไอพี 1
ZUS

1

1. กำหนด Constructor - Pass

วีโอไอพี \ Framework \ App \ แคช \ TypeListInterface

และ

วีโอไอพี \ Framework \ App \ แคช \ Frontend \ สระว่ายน้ำ

ตัวสร้างไฟล์ของคุณตามที่กำหนดไว้ด้านล่าง: -

public function __construct(
    Context $context,
    \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
    \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool
) {
    parent::__construct($context);
    $this->_cacheTypeList = $cacheTypeList;
    $this->_cacheFrontendPool = $cacheFrontendPool;
}

2. ตอนนี้เพิ่มรหัสต่อไปนี้ไปยังวิธีที่คุณต้องการล้างแคชล้าง: -

$types = array('config','layout','block_html','collections','reflection','db_ddl','eav','config_integration','config_integration_api','full_page','translate','config_webservice');
foreach ($types as $type) {
    $this->_cacheTypeList->cleanType($type);
}
foreach ($this->_cacheFrontendPool as $cacheFrontend) {
    $cacheFrontend->getBackend()->clean();
}

ฉันหวังว่านี่จะเป็นประโยชน์สำหรับคุณ :)


0

สร้างไฟล์ชื่อ cacheflush.php และอัพโหลดโฟลเดอร์ Magento ของคุณเช่น public_html ของโฟลเดอร์ httdocs yoursite.com/cacheflush.php แล้วมันจะทำงานได้อย่างสมบูรณ์แบบ หากคุณไม่มี CLI mod ในการโฮสต์ไม่มีปัญหา ... แค่ใช้รหัสนี้ .. มันจะช่วยลดเวลาของคุณ

<?php

        use Magento\Framework\App\Bootstrap;

        require __DIR__ . '/app/bootstrap.php';

        $bootstrap = Bootstrap::create(BP, $_SERVER);

        $obj = $bootstrap->getObjectManager();

        $state = $obj->get('Magento\Framework\App\State');
        $state->setAreaCode('frontend');
        $k[0]='bin/magento';
        $k[1]='cache:flush'; // write your proper command like setup:upgrade,cache:enable etc...
        $_SERVER['argv']=$k;
        try {
            $handler = new \Magento\Framework\App\ErrorHandler();
            set_error_handler([$handler, 'handler']);
            $application = new Magento\Framework\Console\Cli('Magento CLI');
            $application->run();
        } catch (\Exception $e) {
            while ($e) {
                echo $e->getMessage();
                echo $e->getTraceAsString();
                echo "\n\n";
                $e = $e->getPrevious();
            }
        }
    ?>

-1

สิ่งนี้ใช้ได้สำหรับฉัน

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.