Segarkan cache secara terprogram di Magento 2 di sistem jendela


12

Saya mencari kode yang dapat menyegarkan atau membersihkan cache Magento2 melalui skrip.

Itu sangat mudah di Magento 1.x.

Saya menjalankan Magento2 di server WAMP (jendela).

Jawaban:


2

@ denish, katakan dengan menggunakan cmd Anda dapat menghapus cache. Tapi masalah Anda di baris perintah php

Untuk menjalankan klien php sebagai perintah di jendela, Anda perlu mengatur php sebagai lingkungan tersedia. Bagaimana mengatur variabel env untuk PHP?

Setelah itu Anda dapat menjalankan perintah magento 2 cli dari cmd like

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

Sedang pergi di lokasi proyek Anda dari cmd


sama seperti apa langkah-langkah untuk
magento

23

Kode di bawah ini secara otomatis mem-flush cache. Ini bekerja dengan baik untukku.

Kasus 1: Di luar 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();
}

Kasus 2: Di dalam 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();
}

Jika seseorang hanya perlu membersihkan cache dari produk tertentu stackoverflow.com/a/42636405/3733214
Gediminas

16

Hardcoding tipe adalah ide yang buruk . Sebagai gantinya Anda dapat menggunakan metode yang sama yang digunakan oleh cache:flushdan cache:cleanperintah. Kelas pengelola cache juga dapat menarik semua jenis cache untuk Anda, seperti yang dilakukan pada contoh di bawah ini.

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

Untuk menambah jawaban denish, Anda bisa menulis skrip php kecil dan meletakkannya di folder root magento Anda:

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

Ini akan memberi Anda output seperti:

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

Pastikan Anda benar-benar dapat mengeksekusi php dari baris perintah, kalau tidak, ini tidak akan berguna. Untuk windows Anda harus memastikan Anda telah menambahkan php.exe ke PATH Anda di Variabel Lingkungan. Silakan lihat http://willj.co/2012/10/run-wamp-php-windows-7-command-line/


tidak menunjukkan apa
Arunendra

1
Untuk windows Anda harus memastikan Anda telah menambahkan php.exe ke PATH Anda di Variabel Lingkungan. Silakan lihat willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam

Jika Anda dapat menggunakan shell_exec () untuk PHP, maka pemasangan Anda tidak aman. Fungsi ini harus dinonaktifkan di lingkungan langsung.
frustrasi

2

Anda dapat membersihkan atau menyegarkan semua cache menggunakan perintah berikut

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

Saya harap ini akan membantu Anda.


Bagaimana cara melakukannya di jendela?
Arunendra

@Arunendra, Di CLIroot magento terbuka lalu masukkan untuk menghapus cache php bin/magento cache:cleanseperti ini untuk memasukkan semua perintah. Info lebih lanjut klik pada tautan ini
Bojjaiah

seperti sama apa langkah-langkah untuk
magento

1

1. Tentukan konstruktor - lewati

Magento \ Framework \ App \ Cache \ TypeListInterface

dan

Magento \ Framework \ App \ Cache \ Frontend \ Pool

ke konstruktor file Anda seperti yang didefinisikan di bawah ini: -

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. Sekarang tambahkan kode berikut ke metode di mana Anda ingin menghapus / membersihkan cache: -

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

Saya harap ini bermanfaat bagi Anda. :)


0

buat file bernama cacheflush.php dan Unggah folder root Magento Anda seperti public_html folder httdocs. maka yoursite.com/cacheflush.php Ini akan bekerja dengan sempurna. Jika Anda tidak memiliki mod CLI di hosting Anda tidak ada masalah ... cukup gunakan kode ini .. itu akan mengurangi waktu Anda.

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

ini bekerja untuk saya

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.