Actualice el caché mediante programación en Magento 2 en el sistema de ventanas

12

Estoy buscando un código que pueda actualizar o vaciar el caché de Magento2 a través de un script.

Fue tan fácil en Magento 1.x.

Estoy ejecutando Magento2 en el servidor WAMP (ventana).

Arunendra
fuente

Respuestas:

2

@ denish, digamos que usando cmd puede borrar el caché. Pero su problema en la línea de comando php

Para ejecutar el cliente php como comando en la ventana, debe configurar php como entorno disponible ¿Cómo configurar la variable env para PHP?

Después de eso, puede ejecutar cualquiera de los comandos cli de magento 2 desde cmd como

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

Al ir a la ubicación de su proyecto desde cmd

Amit Bera
fuente
igual que cuáles son los pasos para magento 1.
zus
23

El siguiente código lava la memoria caché mediante programación. Funcionó bien para mí.

Caso 1: Fuera 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();
}

Caso 2: dentro 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();
}
Ipsita Rout
fuente
Si solo se necesita limpiar el caché de un producto específico stackoverflow.com/a/42636405/3733214
Gediminas
16

Codificar los tipos es una mala idea. En su lugar, puede utilizar el mismo método utilizado por los comandos cache:flushy cache:clean. La clase de administrador de caché también puede extraer todos los tipos de caché por usted, como se hace en el siguiente ejemplo.

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

Para agregar a la respuesta de denish, puede escribir un pequeño script php y colocarlo en su carpeta raíz de magento:

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

Esto le dará una salida 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

Asegúrese de que realmente puede ejecutar php desde la línea de comandos, de lo contrario, esto será inútil. Para Windows, debe asegurarse de haber agregado php.exe a su RUTA en las Variables de entorno. Consulte http://willj.co/2012/10/run-wamp-php-windows-7-command-line/

tecjam
fuente
no muestra nada
Arunendra
1
Para Windows, debe asegurarse de haber agregado php.exe a su RUTA en las Variables de entorno. Consulte willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam
Si puede usar shell_exec () para PHP, entonces su instalación no es segura. Esta función debe deshabilitarse en un entorno en vivo.
frustratedtech
2

Puede vaciar o actualizar todo el caché con los siguientes comandos

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

Espero que esto ayude.

Denish Vachhani
fuente
¿Cómo hacerlo en la ventana?
Arunendra
@Arunendra, en CLIla raíz abierta de magento, luego ingrese para borrar el caché de php bin/magento cache:cleanesta manera para ingresar todos los comandos. Más información haga clic en este enlace
Bojjaiah
igual que cuáles son los pasos para magento 1
zus
1

1. Definir constructor - pasar

Magento \ Framework \ App \ Cache \ TypeListInterface

y

Magento \ Framework \ App \ Cache \ Frontend \ Pool

al constructor de su archivo como se define a continuación: -

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. Ahora agregue el siguiente código al método donde desea borrar / vaciar caché: -

$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 esto te sea útil. :)

Rohan Hapani
fuente
0

cree un archivo llamado cacheflush.php y cargue su carpeta raíz de Magento como public_html de la carpeta httdocs. entonces yoursite.com/cacheflush.php funcionará perfectamente. Si no tiene mod de CLI en su hosting, no hay problema ... solo use este código ... reducirá su tiempo.

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

esto funcionó para mí

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