Actualisez le cache par programmation dans Magento 2 sur le système de fenêtre

12

Je recherche du code qui peut actualiser ou vider le cache Magento2 via un script.

C'était si facile dans Magento 1.x.

J'utilise Magento2 sur le serveur WAMP (fenêtre).

Arunendra
la source

Réponses:

2

@ denish, disons qu'en utilisant cmd, vous pouvez vider le cache. Mais ur problème sur la ligne de commande php

Afin d'exécuter le client php en tant que commande dans la fenêtre, vous devez définir php comme environnement disponible. Comment définir la variable env pour PHP?

Après cela, vous pouvez exécuter n'importe quelle commande de magento 2 cli à partir de cmd comme

php bin/magento cache:clean
php bin/magento cache:flush
           Or
php bin/magento c:c
php bin/magento c:f

Aller à l'emplacement de votre projet à partir de cmd

Amit Bera
la source
comme même quelles sont les étapes pour magento 1.
zus
23

Le code ci-dessous vide par programmation le cache. Cela a bien fonctionné pour moi.

Cas 1: en dehors de 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();
}

Cas 2: à l'intérieur de 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
la source
S'il suffit de nettoyer le cache d'un produit spécifique stackoverflow.com/a/42636405/3733214
Gediminas
16

Coder en dur les types est une mauvaise idée. Au lieu de cela, vous pouvez utiliser la même méthode utilisée par les commandes cache:flushet cache:clean. La classe du gestionnaire de cache peut également extraire tous les types de cache pour vous, comme dans l'exemple ci-dessous.

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());
}
Pmclain
la source
2

Pour ajouter à la réponse de denish, vous pouvez écrire un petit script php et le placer dans votre dossier racine magento:

<?php
    $command = 'php bin/magento cache:clean && php bin/magento cache:flush';
    echo '<pre>' . shell_exec($command) . '</pre>';
?>

Cela vous donnera une sortie comme:

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

Veuillez vous assurer que vous pouvez réellement exécuter php à partir de la ligne de commande, sinon cela sera inutile. Pour Windows, vous devez vous assurer que vous avez ajouté le php.exe à votre CHEMIN dans les variables d'environnement. Veuillez consulter http://willj.co/2012/10/run-wamp-php-windows-7-command-line/

tecjam
la source
ça ne montre rien
Arunendra
1
Pour Windows, vous devez vous assurer que vous avez ajouté le php.exe à votre CHEMIN dans les variables d'environnement. Veuillez consulter willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam
Si vous pouvez utiliser shell_exec () pour PHP, votre installation n'est pas sécurisée. Cette fonction doit être désactivée dans un environnement réel.
frustratedtech
2

Vous pouvez vider ou actualiser tout le cache à l'aide des commandes suivantes

php bin/magento cache:clean   
php bin/magento cache:flush

J'espère que cela t'aidera.

Denish Vachhani
la source
Comment faire sur fenêtre?
Arunendra
@Arunendra, dans la CLIracine ouverte de magento, puis entrez pour effacer le cache de php bin/magento cache:cleancette façon pour entrer toutes les commandes. Plus d'infos cliquez sur ce lien
Bojjaiah
comme même quelles sont les étapes pour magento 1
zus
1

1. Définir le constructeur - réussir

Magento \ Framework \ App \ Cache \ TypeListInterface

et

Magento \ Framework \ App \ Cache \ Frontend \ Pool

au constructeur de votre fichier tel que défini ci-dessous: -

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. Ajoutez maintenant le code suivant à la méthode dans laquelle vous souhaitez effacer / vider le 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();
}

J'espère que cela vous sera utile. :)

Rohan Hapani
la source
0

créez un fichier nommé cacheflush.php et téléchargez votre dossier racine Magento comme public_html du dossier httdocs. puis yoursite.com/cacheflush.php Cela fonctionnera parfaitement. Si vous n'avez pas de mod CLI dans votre hébergement, pas de problème ... utilisez simplement ce code ... cela réduira votre temps.

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

cela a fonctionné pour moi

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