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


12

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

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

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

Ответы:


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

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/


это ничего не показывает
Арундра

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());
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.