如何在Drupal 8中以编程方式清除缓存?

12

我正在处理一个Drupal 8网站。这个网站之前是可以工作的,但是我最近将它移动到了另一台机器上。

现在它显示出如下错误:

Recoverable fatal error: Argument 1 passed to 

Drupal\Component\DependencyInjection\Container::__construct() must be of

 the type array, boolean given, called in [DRUPAL-

PATH]/core/lib/Drupal/Core/DrupalKernel.php on line 883 and defined in 

[DRUPAL-PATH]/core/lib/Drupal/Component/DependencyInjection/Container.php

 on line 119 #0 [DRUPAL-PATH]/core/includes/bootstrap.inc(550): 

_drupal_error_handler_real(4096, 'Argument 1 pass...', 

'/Applications/M...', 119, Array)

我需要以编程方式清除缓存。

5个回答

32

请尝试以下步骤。

cache_clear_all() // For Drupal-7

drupal_flush_all_caches() // For Drupal-8

5
由于原帖中提到了“以编程方式”,因此这应该是被选中的答案。 - Adaddinsane

25

如果您想清除特定的缓存,例如渲染缓存,则可以运行以下代码:

\Drupal::service('cache.render')->invalidateAll()

如果您想清除所有缓存,请尝试以下操作:

drupal_flush_all_caches()
以下服务实现了CacheBackendInterface并具有invalidateAll()方法,该方法将所有缓存项标记为无效:
cache.bootstrap
cache.config
cache.data
cache.default
cache.discovery
cache.entity
cache.menu
cache.render
cache.static

如果你想更加细致,那么找出缓存ID并使用\Drupal::service('cache.render')->invalidate($cid)来使其失效。 - benjifisher

4

通过SQL

TRUNCATE `cache_bootstrap`;
TRUNCATE `cache_config`;
TRUNCATE `cache_container`;
TRUNCATE `cache_data`;
TRUNCATE `cache_default`;
TRUNCATE `cache_discovery`;
TRUNCATE `cache_dynamic_page_cache`;
TRUNCATE `cache_entity`;
TRUNCATE `cache_menu`;
TRUNCATE `cache_render`;
TRUNCATE `cache_rest`;
TRUNCATE `cachetags`;
TRUNCATE `cache_toolbar`;

通过Drush

drush cr all

正如Sreekanth Kuriyala所提到的,有一个函数可以实现此功能:drupal_flush_all_caches() - JFC

2

如果有人正在寻找一种清除所有视图缓存的方法:

views_invalidate_cache();

是你的朋友!

(注:无需翻译)

2

使用PHP编程 在需要清除缓存的地方,只需使用以下方法:

drupal_flush_all_caches();

除此之外,还有其他方法可以清除缓存:

通过管理界面

前往 /admin/config/development/performance 并点击“清除所有缓存”按钮。

通过 Drush

drush cache-rebuild
//or you can use
drush cr

通过update.php 运行update.php (/update.php)是清除缓存的另一种方法。

通过SQL 删除所有以"cache_"开头的表中的数据,如下所示:

TRUNCATE cache_config;
TRUNCATE cache_container;
TRUNCATE cache_data;
TRUNCATE cache_default;
TRUNCATE cache_discovery;
TRUNCATE cache_dynamic_page_cache;
TRUNCATE cache_entity;
TRUNCATE cache_menu;
TRUNCATE cache_render;
TRUNCATE cache_toolbar;

其他方法:

$variables['#cache']['max-age'] = 0;

\Drupal::service('page_cache_kill_switch')->trigger();

cache_clear_all() // For Drupal-7

drupal_flush_all_caches() // For Drupal-8

如果您想清除特定的缓存,比如渲染缓存,那么可以运行以下代码:
\Drupal::service('cache.render')->invalidateAll();

如果您想清除特定的缓存,比如路由缓存,则可以运行以下代码:
\Drupal::service("router.builder")->rebuild();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接