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?

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

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

Melvyn
la source
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
1

Si vous avez vraiment besoin d'effacer tous les stockages de cache, utilisez le code suivant,

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

Ici, la fonction Flush appelle la fonctionnalité de cache magento par défaut.Si vous avez besoin de plus de clarifications, reportez-vous à l'url suivante.

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

Pasupathi Thangavel
la source