Réponses:
@ 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
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();
}
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:flush
et 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());
}
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/
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.
CLI
racine ouverte de magento, puis entrez pour effacer le cache de php bin/magento cache:clean
cette façon pour entrer toutes les commandes. Plus d'infos cliquez sur ce lien
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. :)
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();
}
}
?>
cela a fonctionné pour moi
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());