Aggiorna la cache a livello di codice in Magento 2 sul sistema a finestre


12

Sto cercando un codice in grado di aggiornare o svuotare la cache di Magento2 tramite script.

È stato così facile in Magento 1.x.

Sto eseguendo Magento2 sul server WAMP (finestra).

Risposte:


2

@ 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


come lo stesso, quali sono i passaggi per Magento 1.
zus,

23

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

Se è necessario pulire solo la cache di un prodotto specifico stackoverflow.com/a/42636405/3733214
Gediminas,

16

Hardcoding dei tipi è una cattiva idea. Invece puoi usare lo stesso metodo usato dai comandi cache:flushe 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());
}

2

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/


non mostra nulla
Arunendra,

1
Per Windows devi assicurarti di aver aggiunto php.exe al tuo PERCORSO nelle variabili d'ambiente. Si prega di consultare willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam

Se sei in grado di usare shell_exec () per PHP, l'installazione non è sicura. Questa funzione dovrebbe essere disabilitata in un ambiente live.
frustratedtech,

2

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


Come farlo sulla finestra?
Arunendra,

@Arunendra, In CLImagento root aperto quindi immettere per cancellare la cache in php bin/magento cache:cleanquesto modo per inserire tutti i comandi. Maggiori informazioni clicca su questo link
Bojjaiah,

come lo stesso, quali sono i passaggi per Magento 1
zus,

1

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


0

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

-1

questo ha funzionato per me

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.