Pencere sisteminde Magento 2'de önbelleği programlı olarak yenileyin


12

Komut dosyası aracılığıyla Magento2 önbelleğini yenileyebilen veya temizleyebilen kod arıyorum

Magento 1.x'te çok kolaydı.

WAMP sunucusunda Magento2 çalıştırıyorum (pencere).

Yanıtlar:


2

@ denish, cmd kullanarak önbelleği temizleyebilirsiniz diyelim. Ama php komut satırında ur sorunu

Php istemcisi penceresinde komut olarak çalıştırmak için kullanılabilir php ortam olarak ayarlamanız gerekir PHP için env değişkeni nasıl ayarlanır?

Bundan sonra cmd gibi magento 2 cli komutlarından herhangi birini çalıştırabilirsiniz

php bin/magento cache:clean
php bin/magento cache:flush
           Or
php bin/magento c:c
php bin/magento c:f

CMD'den proje yerinize giderken


aynı gibi magento 1 için adımlar nedir
zus

23

Aşağıdaki kod programlı olarak önbelleği temizler. Benim için iyi çalıştı.

Durum 1: Magento Dışı

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

Durum 2: Magento'nun İçinde

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

Yalnızca belirli bir ürünün önbelleğini temizlemesi gerekiyorsa stackoverflow.com/a/42636405/3733214
Gediminas

16

Türleri kodlamak kötü bir fikirdir. Bunun yerine cache:flushve cache:cleankomutları tarafından kullanılan yöntemi kullanabilirsiniz . Önbellek yöneticisi sınıfı, aşağıdaki örnekte olduğu gibi sizin için tüm önbellek türlerini de çekebilir.

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'in cevabına eklemek için küçük bir php betiği yazabilir ve magento kök klasörünüze yerleştirebilirsiniz:

<?php
    $command = 'php bin/magento cache:clean && php bin/magento cache:flush';
    echo '<pre>' . shell_exec($command) . '</pre>';
?>

Bu size şöyle bir çıktı verecektir:

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

Lütfen php'yi komut satırından hariç tutabildiğinizden emin olun, aksi takdirde bu işe yaramaz olacaktır. Windows için php.exe'yi Ortam Değişkenleri'ndeki PATH'nize eklediğinizden emin olmalısınız. Lütfen http://willj.co/2012/10/run-wamp-php-windows-7-command-line/ adresine bakın.


hiçbir şey göstermiyor
Arunendra

1
Windows için php.exe'yi Ortam Değişkenleri'ndeki PATH'nize eklediğinizden emin olmalısınız. Lütfen bkz. Willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam

PHP için shell_exec () kullanabiliyorsanız, kurulumunuz güvenli değildir. Bu işlev canlı bir ortamda devre dışı bırakılmalıdır.
frustratedtech

2

Aşağıdaki komutları kullanarak tüm önbelleği temizleyebilir veya yenileyebilirsiniz

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

Umarım bu sana yardımcı olmuştur.


Pencerede nasıl yapılır?
Arunendra

@Arunendra, CLIAçık magento kökü sonra php bin/magento cache:cleantüm komutları girmek için bu şekilde önbelleği temizlemek için girin. Daha fazla bilgi bu linke tıklayın
Bojjaiah

aynı gibi magento 1 için adımlar nedir
zus

1

1. Yapıcı tanımlayın - geçiş

Magento \ Framework \ App \ Cache \ TypeListInterface

ve

Magento \ Framework \ App \ Cache \ Frontend \ Havuzu

aşağıda belirtildiği şekilde dosyanızın yapıcısına: -

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. Şimdi önbelleği temizle / yıkamayı istediğiniz yönteme aşağıdaki kodu ekleyin: -

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

Umarım bu sizin için yararlı olacaktır. :)


0

cacheflush.php adlı bir dosya oluşturun ve Magento kök klasörünüzü httdocs klasörünün public_html gibi yükleyin. sonra siteniz.com/cacheflush.php Mükemmel çalışır. Barındırma sisteminizde CLI modunuz yoksa sorun yok ... sadece bu kodu kullanın .. zamanınızı azaltacaktır.

<?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

bu benim için çalıştı

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.