Respuestas:
@ 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
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();
}
Codificar los tipos es una mala idea. En su lugar, puede utilizar el mismo método utilizado por los comandos cache:flush
y 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());
}
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/
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.
CLI
la raíz abierta de magento, luego ingrese para borrar el caché de php bin/magento cache:clean
esta manera para ingresar todos los comandos. Más información haga clic en este enlace
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. :)
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();
}
}
?>
esto funcionó para mí
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());