Обновите кеш программно в Magento 2 в оконной системе

12

Я ищу код, который может обновить или очистить кэш Magento2 через скрипт.

Это было так легко в Magento 1.x.

Я использую Magento2 на сервере WAMP (окно).

Arunendra
источник

Ответы:

2

@ 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

Амит Бера
источник
как то же самое, что шаги для magento 1.
Zus
23

Приведенный ниже код программно очищает кеш. Это работало нормально для меня.

Случай 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();
}
Ипсита Раут
источник
Если нужно только очистить кеш конкретного продукта stackoverflow.com/a/42636405/3733214
Гедиминас
16

Жесткое кодирование типов - плохая идея. Вместо этого вы можете использовать один и тот же метод , используемый 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());
}
Pmclain
источник
2

Чтобы добавить к ответу Дениша, вы можете написать небольшой скрипт 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/

tecjam
источник
это ничего не показывает
Арундра
1
Для окон вы должны убедиться, что вы добавили php.exe в PATH в переменных среды. Пожалуйста, смотрите willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam
Если вы можете использовать shell_exec () для PHP, тогда ваша установка небезопасна. Эта функция должна быть отключена в реальной среде.
Frustratedtech
2

Вы можете очистить или обновить весь кэш, используя следующие команды

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

Я надеюсь, что это поможет вам.

Дениш Вачхани
источник
Как это сделать на окне?
Арундра,
@Arunendra, В CLIоткрытом корне magento затем введите, чтобы очистить кеш, php bin/magento cache:cleanкак этот способ, чтобы ввести все команды. Больше информации нажмите на эту ссылку
Bojjaiah
как то же самое, что шаги для magento 1
Zus
1

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

Я надеюсь, что это будет полезно для вас. :)

Рохан Хапани
источник
0

создайте файл с именем 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();
            }
        }
    ?>
Атиш Дипанкар Байдья
источник
-1

это сработало для меня

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
Сэнди Лампропулу
источник