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

Arunendra
sumber

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

Amit Bera
sumber
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();
}
Ipsita Rout
sumber
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());
}
Pclclain
sumber
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/

tecjam
sumber
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.

Denish Vachhani
sumber
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. :)

Rohan Hapani
sumber
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();
            }
        }
    ?>
Atish Dipankar Baidya
sumber
-1

ini bekerja untuk saya

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
Sandy Lampropoulou
sumber