Câu trả lời:
@ denish, nói bằng cách sử dụng cmd bạn có thể xóa bộ nhớ cache. Nhưng vấn đề của bạn ở dòng lệnh php
Để chạy php client dưới dạng lệnh trong cửa sổ, bạn cần đặt php làm môi trường có sẵn Làm thế nào để đặt biến env cho PHP?
Sau đó, bạn có thể chạy bất kỳ lệnh magento 2 cli nào từ cmd như
php bin/magento cache:clean
php bin/magento cache:flush
Or
php bin/magento c:c
php bin/magento c:f
Đang đi tại vị trí dự án của bạn từ cmd
Các mã dưới đây lập trình xóa bộ nhớ cache. Nó làm việc tốt cho tôi.
Trường hợp 1: Bên ngoài 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();
}
Trường hợp 2: Bên trong 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();
}
Hardcoding các loại là một ý tưởng tồi . Thay vào đó, bạn có thể sử dụng cùng một phương thức được sử dụng bởi các lệnh cache:flush
và cache:clean
. Lớp trình quản lý bộ đệm cũng có thể kéo tất cả các loại bộ đệm cho bạn, như được thực hiện trong ví dụ dưới đây.
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());
}
Để thêm vào câu trả lời của denish, bạn có thể viết một đoạn mã php nhỏ và đặt nó vào thư mục gốc magento của bạn:
<?php
$command = 'php bin/magento cache:clean && php bin/magento cache:flush';
echo '<pre>' . shell_exec($command) . '</pre>';
?>
Điều này sẽ cung cấp cho bạn một đầu ra như:
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
Hãy chắc chắn rằng bạn thực sự có thể thực hiện php từ dòng lệnh, nếu không điều này sẽ vô dụng. Đối với các cửa sổ, bạn phải đảm bảo rằng bạn đã thêm php.exe vào PATH của bạn trong Biến môi trường. Vui lòng xem http://willj.co/2012/10/run-wamp-php-windows-7-command-line/
Bạn có thể xóa hoặc làm mới tất cả bộ đệm bằng các lệnh sau
php bin/magento cache:clean
php bin/magento cache:flush
Tôi hy vọng điều này sẽ giúp bạn.
CLI
root magento mở, sau đó nhập để xóa bộ đệm php bin/magento cache:clean
như cách này để nhập tất cả các lệnh. Thêm thông tin nhấp vào liên kết này
1. Xác định hàm tạo - vượt qua
Magento \ Framework \ App \ Cache \ TypeListInterface
và
Magento \ Framework \ App \ Cache \ Frontend \ Pool
đến hàm tạo của tệp của bạn như được định nghĩa dưới đây: -
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. Bây giờ thêm mã sau vào phương thức mà bạn muốn xóa / xóa bộ đệm: -
$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();
}
Tôi hy vọng điều này sẽ hữu ích cho bạn. :)
tạo một tệp có tên cacheeflush.php và Tải lên thư mục gốc Magento của bạn như public_html của thư mục httdocs. sau đó yoursite.com/cacheflush.php Nó sẽ hoạt động hoàn hảo. Nếu bạn không có mod CLI trong lưu trữ thì không có vấn đề gì ... chỉ cần sử dụng mã này .. nó sẽ làm giảm thời gian của bạn.
<?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();
}
}
?>