창 시스템의 Magento 2에서 프로그래밍 방식으로 캐시 새로 고침


12

스크립트를 통해 Magento2 캐시를 새로 고치거나 플러시 할 수있는 코드를 찾고 있습니다.

Magento 1.x에서는 너무 쉬웠습니다.

WAMP 서버 (창)에서 Magento2를 실행하고 있습니다.

답변:


2

@denish, cmd를 사용하면 캐시를 지울 수 있습니다. 그러나 PHP 명령 줄에서 문제가 발생했습니다.

창에서 PHP 클라이언트를 명령으로 실행하려면 PHP를 환경 사용 가능 으로 설정해야합니다. PHP 의 env 변수를 설정하는 방법은 무엇입니까?

그 후 당신은 cmd를에서 2 CLI 명령을 젠토 중 하나를 실행할 수 있습니다 같은

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:flushand 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의 경우 환경 변수의 PATH에 php.exe를 추가했는지 확인하십시오. http://willj.co/2012/10/run-wamp-php-windows-7-command-line/을 참조 하십시오


그것은 아무것도 보이고 있지
않다

1
Windows의 경우 환경 변수의 PATH에 php.exe를 추가했는지 확인하십시오. willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam

PHP에 shell_exec ()를 사용할 수 있다면 설치가 안전하지 않은 것입니다. 실제 환경에서는이 기능을 비활성화해야합니다.
frustratedtech

2

다음 명령을 사용하여 모든 캐시를 플러시하거나 새로 고칠 수 있습니다

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

이것이 도움이되기를 바랍니다.


창에서 어떻게합니까?
Arunendra

@Arunendra, CLI열린 magento 루트에서 다음 php bin/magento cache:clean과 같이 캐시를 지우려면 모든 명령을 입력하십시오. 더 많은 정보 는이 링크를 클릭하십시오
Bojjaiah

동일하다 magento 1의 단계는 무엇입니까
zus

1

1. 생성자 정의 – 통과

Magento \ Framework \ App \ Cache \ TypeListInterface

마 젠토 \ 프레임 워크 \ 앱 \ 캐시 \ 프론트 \ 풀

아래 정의 된대로 파일의 생성자에게 :-

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라는 파일을 만들고 httdocs 폴더의 public_html과 같은 Magento 루트 폴더를 업로드하십시오. 그러면 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());
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.