Aktualisieren Sie den Cache programmgesteuert in Magento 2 im Fenstersystem

12

Ich suche nach Code, der den Magento2-Cache per Skript aktualisieren oder leeren kann.

In Magento 1.x war es so einfach.

Ich verwende Magento2 auf dem WAMP-Server (Fenster).

Arunendra
quelle

Antworten:

2

@ denish, sagen wir mit cmd können Sie den Cache leeren. Aber dein Problem bei der PHP-Kommandozeile

Um den PHP-Client als Befehl im Fenster auszuführen, müssen Sie PHP als verfügbare Umgebung festlegen. Wie wird die Umgebungsvariable für PHP festgelegt?

Danach können Sie einen beliebigen magento 2 cli-Befehl von cmd like ausführen

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

Bei Ihrem Projektstandort von cmd

Amit Bera
quelle
wie gleich, was ist die Schritte für Magento 1.
zus
23

Der folgende Code leert den Cache programmgesteuert. Es hat gut funktioniert für mich.

Fall 1: Außerhalb von 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();
}

Fall 2: In 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
quelle
Wenn man nur den Cache eines bestimmten Produkts leeren muss stackoverflow.com/a/42636405/3733214
Gediminas
16

Das Hardcodieren der Typen ist eine schlechte Idee. Stattdessen können Sie dieselbe Methode verwenden, die auch von den Befehlen cache:flushund verwendet wird cache:clean. Die Cache-Manager-Klasse kann auch alle Cache-Typen für Sie abrufen, wie im folgenden Beispiel beschrieben.

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
quelle
2

Um die Antwort von denish zu ergänzen, könnten Sie ein kleines PHP-Skript schreiben und es in Ihrem Magento-Stammordner ablegen:

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

Dies gibt Ihnen eine Ausgabe wie:

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

Bitte stellen Sie sicher, dass Sie PHP tatsächlich über die Befehlszeile ausführen können, da dies sonst unbrauchbar wird. Für Windows müssen Sie sicherstellen, dass Sie die php.exe zu Ihrem PATH in den Umgebungsvariablen hinzugefügt haben. Siehe http://willj.co/2012/10/run-wamp-php-windows-7-command-line/

Tecjam
quelle
es zeigt nichts
Arunendra
1
Für Windows müssen Sie sicherstellen, dass Sie die php.exe zu Ihrem PATH in den Umgebungsvariablen hinzugefügt haben. Bitte sehen Sie willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam
Wenn Sie shell_exec () für PHP verwenden können, ist Ihre Installation nicht sicher. Diese Funktion sollte in einer Live-Umgebung deaktiviert sein.
frustrierte
2

Sie können den gesamten Cache mit den folgenden Befehlen leeren oder aktualisieren

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

Ich hoffe, dies wird dir helfen.

Denish Vachhani
quelle
Wie mache ich das am Fenster?
Arunendra
@Arunendra, In CLIOpen Magento Root geben Sie dann ein, um den Cache auf php bin/magento cache:cleandiese Weise zu leeren und alle Befehle einzugeben. Weitere Informationen klicken Sie auf diesen Link
Bojjaiah
wie gleich, was ist die Schritte für Magento 1
zus
1

1. Konstruktor definieren - übergeben

Magento \ Framework \ App \ Cache \ TypeListInterface

und

Magento \ Framework \ App \ Cache \ Frontend \ Pool

an den unten definierten Konstruktor Ihrer Datei: -

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. Fügen Sie nun der Methode, mit der Sie den Cache löschen / leeren möchten, folgenden Code hinzu: -

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

Ich hoffe das wird nützlich für dich. :)

Rohan Hapani
quelle
0

Erstellen Sie eine Datei mit dem Namen cacheflush.php und laden Sie Ihren Magento-Stammordner wie public_html des httdocs-Ordners hoch. dann yoursite.com/cacheflush.php Es wird perfekt funktionieren. Wenn Sie keinen CLI-Mod in Ihrem Hosting haben, kein Problem ... verwenden Sie einfach diesen Code ... es wird Ihre Zeit reduzieren.

<?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
quelle
0

das hat bei mir funktioniert

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