Bagaimana saya bisa mem-flushing Magento's Cache secara pemrograman?


23

Saya mengotomatisasi konfigurasi rilis dengan bootstrapage Mage di beberapa skrip rilis. Di akhir skrip, saya perlu membersihkan cache Magento.

Apakah ada cara untuk membersihkan cache menggunakan salah satu Magekelas atau metode?


1
coba ini: Mage :: app () -> cleanCache () atau Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori

Jawaban:


25

Silakan coba kode berikut untuk membersihkan cache secara terprogram

Mage::app()->cleanCache()

atau

Mage::app()->getCacheInstance()->flush(); 

40

Jika Anda benar-benar menginginkannya, Anda juga dapat membersihkan hanya satu atau lebih tipe cache. Ini sebenarnya cara admin mengerjakannya. DibawahMage_Adminhtml_CacheController::massRefreshAction

Anda dapat melihat bahwa ia melewati semua parameter typesdan memanggil yang berikut

$tags = Mage::app()->getCacheInstance()->cleanType($type);
Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
$updatedTypes++;

Jenis yang mungkin adalah sebagai berikut:

  1. konfigurasi
  2. tata letak
  3. block_html
  4. menterjemahkan
  5. koleksi
  6. eav
  7. config_api
  8. config_api2
  9. halaman penuh

Dan ini dapat dikembalikan dengan menelepon Mage::app()->getCacheInstance()->getTypes()


3
Setelah mencari-cari dengan membersihkan cache secara terprogram komentar ini lebih berguna daripada jawaban yang dipilih. Karena penting untuk menelepon dispatchEvent, Varnish ESI saya tidak akan beres sebelum saya menambahkan panggilan dispatchEvent. (Yang tentu saja akan memungkinkan modul lain untuk memecat kode mereka sesuai)
Barry Carlyon

6

Skrip eksternal cepat untuk menghapus semua cache:

<?php

require_once './app/Mage.php';
umask(0);
Mage::app('default');
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

try {
    $allTypes = Mage::app()->useCache();
    foreach($allTypes as $type => $value) {
        Mage::app()->getCacheInstance()->cleanType($type);
        Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
        echo "{$type} </br>";
    }
    echo 'done';
} catch (Exception $e) {
    echo $e->getMessage();
}

3

Kami bisa menggunakan n98-magerun . Terutama karena Anda tidak boleh mem-flush cache selama eksekusi skrip penempatan. Lihat juga sys:setup:incrementalsub perintah untuk eksekusi skrip pengaturan Magento yang lebih terkontrol.


Bisakah Anda memberikan beberapa wawasan tambahan ke dalam pernyataan Anda "Terutama karena Anda seharusnya tidak pernah membuka cache selama eksekusi skrip penempatan"?
STW

1
Magento memiliki fitur yang secara otomatis menjalankan peningkatan. Ini dipicu, ketika cache konfigurasi harus dibangun kembali. Kecuali Anda secara khusus membutuhkan fitur itu dan dengan hati-hati membuat kode untuknya, Anda memperkenalkan proses paralel yang mungkin tidak diantisipasi oleh Anda atau kolega Anda.
Melvyn

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.