Ответы:
@ denish, скажем, с помощью cmd вы можете очистить кеш. Но у вас проблема в командной строке php
Чтобы запустить php клиент в качестве команды в окне, вам нужно установить php как доступную среду. Как установить переменную env для PHP?
После этого вы можете запустить любую команду magento 2 cli из cmd, например
php bin/magento cache:clean
php bin/magento cache:flush
Or
php bin/magento c:c
php bin/magento c:f
При переходе на место вашего проекта из cmd
Приведенный ниже код программно очищает кеш. Это работало нормально для меня.
Случай 1: вне 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();
}
Случай 2: Внутри 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();
}
Жесткое кодирование типов - плохая идея. Вместо этого вы можете использовать один и тот же метод , используемый cache:flush
и cache:clean
командами. Класс диспетчера кэша также может извлекать для вас все типы кэша, как показано в примере ниже.
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());
}
Чтобы добавить к ответу Дениша, вы можете написать небольшой скрипт php и поместить его в корневую папку magento:
<?php
$command = 'php bin/magento cache:clean && php bin/magento cache:flush';
echo '<pre>' . shell_exec($command) . '</pre>';
?>
Это даст вам вывод, как:
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
Пожалуйста, убедитесь, что вы действительно можете извлечь php из командной строки, иначе это будет бесполезно. Для окон вы должны убедиться, что вы добавили php.exe в PATH в переменных среды. Пожалуйста, смотрите http://willj.co/2012/10/run-wamp-php-windows-7-command-line/
Вы можете очистить или обновить весь кэш, используя следующие команды
php bin/magento cache:clean
php bin/magento cache:flush
Я надеюсь, что это поможет вам.
CLI
открытом корне magento затем введите, чтобы очистить кеш, php bin/magento cache:clean
как этот способ, чтобы ввести все команды. Больше информации нажмите на эту ссылку
1. Определить конструктор - пройти
Magento \ Framework \ App \ Cache \ TypeListInterface
а также
Magento \ Framework \ App \ Cache \ Frontend \ Pool
в конструктор вашего файла, как определено ниже: -
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. Теперь добавьте следующий код в метод, где вы хотите очистить / очистить кеш: -
$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();
}
Я надеюсь, что это будет полезно для вас. :)
создайте файл с именем cacheflush.php и загрузите свою корневую папку Magento, например public_html из папки httdocs. тогда yoursite.com/cacheflush.php Это будет работать отлично. Если у вас нет модов CLI на вашем хостинге, нет проблем ... просто используйте этот код ... это сократит ваше время.
<?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();
}
}
?>
это сработало для меня
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());