Оновіть кеш програмно в 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: Поза Магенто

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: Всередині Магенто

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
Gediminas

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

Щоб додати відповідь denish, ви можете написати невеликий скрипт для 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 з командного рядка, інакше це буде марно. Для Windows вам потрібно переконатися, що ви додали php.exe до свого PATH у змінні середовища. Перегляньте http://willj.co/2012/10/run-wamp-php-windows-7-command-line/


він нічого не показує
Arunendra

1
Для Windows вам потрібно переконатися, що ви додали php.exe до свого PATH у змінні середовища. Будь ласка, дивіться willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam

Якщо ви можете використовувати shell_exec () для PHP, то ваша установка не захищена. Цю функцію слід відключити в живих умовах.
засмученийтехнолог

2

Ви можете очистити або оновити весь кеш, використовуючи наступні команди

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

Я сподіваюся, що це вам допоможе.


Як це зробити на вікні?
Arunendra

@Arunendra, у CLIвідкритому корені magento тоді введіть, щоб очистити кеш php bin/magento cache:cleanтаким чином, щоб ввести всі команди. Більше інформації натисніть на це посилання
Bojjaiah

як те, що є кроками для магенто 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.