Atualize o cache programaticamente no Magento 2 no sistema de janelas

12

Estou procurando um código que possa atualizar ou liberar o cache do Magento2 via script.

Foi tão fácil no Magento 1.x.

Estou executando o Magento2 no servidor WAMP (janela).

Arunendra
fonte

Respostas:

2

@ denish, digamos, usando o cmd, você pode limpar o cache. Mas seu problema na linha de comando php

Para executar o cliente php como comando na janela, você precisa definir o php como ambiente disponível. Como definir a variável env para o PHP?

Depois disso, você pode executar qualquer comando magento 2 cli do cmd, como

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

Ao ir para o local do projeto a partir do cmd

Amit Bera
fonte
como mesmo o que é os passos para Magento 1.
ZUS
23

O código abaixo programaticamente libera o cache. Funcionou bem para mim.

Caso 1: Fora do 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: Por dentro do 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
fonte
Se um só precisa de cache limpa de um produto específico stackoverflow.com/a/42636405/3733214
Gediminas
16

A codificação dos tipos é uma ideia. Em vez disso, você pode usar o mesmo método usado pelos comandos cache:flushe cache:clean. A classe do gerenciador de cache também pode obter todos os tipos de cache para você, conforme feito no exemplo abaixo.

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

Para adicionar à resposta do denish, você pode escrever um pequeno script php e colocá-lo na pasta raiz do magento:

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

Isso fornecerá uma saída como:

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

Certifique-se de que você pode realmente executar o php na linha de comando, caso contrário isso será inútil. Para o Windows, você deve certificar-se de ter adicionado o php.exe ao PATH nas variáveis ​​de ambiente. Consulte http://willj.co/2012/10/run-wamp-php-windows-7-command-line/

tecjam
fonte
ele está mostrando nada
Arunendra
1
Para o Windows, você deve certificar-se de ter adicionado o php.exe ao PATH nas variáveis ​​de ambiente. Veja willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam
Se você pode usar o shell_exec () para PHP, sua instalação não é segura. Esta função deve ser desativada em um ambiente ativo.
Frustratedtech
2

Você pode liberar ou atualizar todo o cache usando os seguintes comandos

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

Eu espero que isso te ajude.

Denish Vachhani
fonte
Como fazê-lo na janela?
Arunendra
@Arunendra, Na CLIraiz aberta do magento, em seguida, insira para limpar o cache php bin/magento cache:cleandesta maneira para inserir todos os comandos. Mais informações clique neste link
Bojjaiah 11/11
como o mesmo que são os passos para magento 1
zus 27/06/19
1

1. Definir construtor - aprovação

Magento \ Framework \ App \ Cache \ TypeListInterface

e

Magento \ Framework \ Aplicativo \ Cache \ Frontend \ Pool

ao construtor do seu arquivo, conforme definido abaixo: -

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. Agora adicione o seguinte código ao método em que você deseja limpar / liberar o 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();
}

Espero que isso seja útil para você. :)

Rohan Hapani
fonte
0

crie um arquivo chamado cacheflush.php e faça upload da sua pasta raiz do Magento como public_html da pasta activationdocs. yoursite.com/cacheflush.php Funcionará perfeitamente. Se você não possui um mod CLI na sua hospedagem, não há problema ... basta usar este código .. isso reduzirá seu 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();
            }
        }
    ?>
Atish Dipankar Baidya
fonte
0

isso funcionou para mim

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