Comment puis-je vider le cache de Magento par programme?


23

J'automatise les configurations de versions en amorçant Mage dans plusieurs scripts de versions. À la fin des scripts, je dois vider le cache de Magento.

Existe-t-il un moyen de vider le cache en utilisant l'une des Mageclasses ou méthodes?


1
essayez ceci: Mage :: app () -> cleanCache () ou Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori

Réponses:


25

Veuillez essayer le code suivant pour vider le cache par programme

Mage::app()->cleanCache()

ou

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

40

Si vous le vouliez vraiment, vous pouvez également nettoyer un ou plusieurs types de cache. C'est en fait la façon dont la section admin le fait. En dessous deMage_Adminhtml_CacheController::massRefreshAction

Vous pouvez voir qu'il parcourt tous les paramètres typeset appelle ce qui suit

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

Les types possibles sont les suivants:

  1. config
  2. disposition
  3. block_html
  4. Traduire
  5. collections
  6. eav
  7. config_api
  8. config_api2
  9. page entière

Et ceux-ci peuvent être retournés en appelant Mage::app()->getCacheInstance()->getTypes()


3
Ayant eu des problèmes avec l'effacement du cache par programme, ce commentaire est plus utile que la réponse sélectionnée. Comme il est important d'appeler le dispatchEvent, mes ESI de vernis n'étaient pas effacés jusqu'à ce que j'ajoute l'appel de dispatchEvent. (Ce qui permettra bien sûr aux autres modules de déclencher leur code en conséquence)
Barry Carlyon

6

Un script externe rapide pour vider tout le 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

Notre nous pourrions utiliser n98-magerun . D'autant plus que vous ne devez jamais vider le cache lors de l'exécution des scripts de déploiement. Regardez également la sys:setup:incrementalsous - commande pour une exécution plus contrôlée des scripts de configuration de Magento.


Pouvez-vous fournir des informations supplémentaires sur votre déclaration "D'autant plus que vous ne devez jamais vider le cache pendant l'exécution des scripts de déploiement"?
STW

1
Magento possède une fonctionnalité qui exécute automatiquement les mises à niveau. Cela se déclenche lorsque le cache de configuration doit être reconstruit. À moins que vous n'ayez spécifiquement besoin de cette fonctionnalité et que vous la codiez soigneusement, vous introduisez un processus parallèle que vous ou vos collègues n'auriez peut-être pas prévu.
Melvyn

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.