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).

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


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();
}

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());
}

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/


ç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.


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. :)


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();
            }
        }
    ?>

-1

cela a fonctionné pour moi

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
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.