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?

STW
sumber
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(); 
Stefan Gregori
sumber
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()

David Manners
sumber
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();
}
Renon Stewart
sumber
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.

Melvyn
sumber
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
1

Jika Anda Benar-benar perlu menghapus semua penyimpanan cache berarti menggunakan kode berikut,

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

Di sini fungsi Flush memanggil fungsi cache magento default, Jika Anda memerlukan lebih banyak klarifikasi berarti merujuk url berikut.

/programming/15028159/magento-flush-cache-storage

Pasupathi Thangavel
sumber