Risposte:
@ denish, ad esempio usando cmd puoi cancellare la cache. Ma il tuo problema alla riga di comando di php
Per eseguire php client come comando nella finestra devi impostare php come ambiente disponibile Come impostare la variabile env per PHP?
Successivamente puoi eseguire qualsiasi comando magento 2 cli da cmd like
php bin/magento cache:clean
php bin/magento cache:flush
Or
php bin/magento c:c
php bin/magento c:f
Andando nella posizione del progetto da cmd
Il codice seguente elimina a livello di codice la cache. Ha funzionato bene per me.
Caso 1: fuori da 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();
}
Caso 2: Inside 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();
}
Hardcoding dei tipi è una cattiva idea. Invece puoi usare lo stesso metodo usato dai comandi cache:flush
e cache:clean
. La classe gestore della cache può anche estrarre tutti i tipi di cache, come nell'esempio seguente.
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());
}
Per aggiungere alla risposta di denish, puoi scrivere un piccolo script php e inserirlo nella cartella principale di magento:
<?php
$command = 'php bin/magento cache:clean && php bin/magento cache:flush';
echo '<pre>' . shell_exec($command) . '</pre>';
?>
Questo ti darà un output come:
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
Assicurati di poter effettivamente eseguire php dalla riga di comando, altrimenti sarà inutile. Per Windows devi assicurarti di aver aggiunto php.exe al tuo PERCORSO nelle variabili d'ambiente. Si prega di consultare http://willj.co/2012/10/run-wamp-php-windows-7-command-line/
È possibile svuotare o aggiornare tutta la cache utilizzando i seguenti comandi
php bin/magento cache:clean
php bin/magento cache:flush
Spero che questo ti possa aiutare.
CLI
magento root aperto quindi immettere per cancellare la cache in php bin/magento cache:clean
questo modo per inserire tutti i comandi. Maggiori informazioni clicca su questo link
1. Definisci il costruttore - passa
Magento \ Framework \ App \ Cache \ TypeListInterface
e
Magento \ Framework \ App \ Cache \ Frontend \ Pool
al costruttore del tuo file come definito di seguito: -
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. Ora aggiungi il seguente codice al metodo in cui desideri cancellare / svuotare la 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();
}
Spero che questo ti sia utile :)
crea un file chiamato cacheflush.php e carica la cartella principale di Magento come public_html della cartella httdocs. allora yoursite.com/cacheflush.php Funzionerà perfettamente. Se non hai alcuna mod CLI nel tuo hosting nessun problema ... usa questo codice ... ridurrà il tuo tempo.
<?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();
}
}
?>
questo ha funzionato per me
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());