【问题标题】:How to clear cache programmatically in Drupal 8?如何在 Drupal 8 中以编程方式清除缓存?
【发布时间】:2017-04-25 10:31:04
【问题描述】:

我正在开发一个 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)

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

【问题讨论】:

    标签: caching drupal drupal-8


    【解决方案1】:

    试试下面。

    cache_clear_all() // For Drupal-7
    
    drupal_flush_all_caches() // For Drupal-8
    

    【讨论】:

    • 这应该是选择的答案,因为 OP 说“以编程方式”。
    【解决方案2】:

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

    \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)
    【解决方案3】:

    通过 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 cr all
    

    【讨论】:

    • 正如 sreekanth kuriyala 提到的,它有一个功能:drupal_flush_all_caches()
    【解决方案4】:

    以编程方式使用 PHP 只需在要清除缓存的地方使用此方法即可:

    drupal_flush_all_caches();
    

    还有其他清除缓存的方法:

    按管理界面

    导航到 /admin/config/development/performance 并点击“清除所有缓存”按钮。

    通过德鲁什

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多