suitmedia/laravel-cloudflare

在Laravel中实现简单的Cloudflare缓存清除

1.2.0 2023-11-09 09:18 UTC

This package is auto-updated.

Last update: 2024-09-09 10:59:35 UTC


README

Build Status codecov Total Downloads Latest Stable Version License: MIT

Laravel Cloudflare

在模型更新时清除Cloudflare缓存

摘要

此包提供了一种简单的方法,在模型更新时清除Cloudflare缓存。

目录

设置

使用Composer安装此包

$ composer require suitmedia/laravel-cloudflare

Laravel版本兼容性

服务提供者

在您的 config/app.php 文件中添加包服务提供者

'providers' => [
    // ...
    Suitmedia\Cloudflare\ServiceProvider::class,
];

别名

在您的 config/app.php 文件中添加包的别名

'aliases' => [
    // ...
    'CloudflareCache' => Suitmedia\Cloudflare\Facade::class,
];

发布包资源

使用以下 php artisan 命令发布包资源文件

$ php artisan vendor:publish --provider="Suitmedia\Cloudflare\ServiceProvider"

上述命令会在您的应用程序配置目录中创建一个新的 laravel-cloudflare.php 文件。

配置

return [

    /*
    |--------------------------------------------------------------------------
    | Cloudflare Site
    |--------------------------------------------------------------------------
    |
    | Specify the sitename of the Cloudflare.
    |
    */
    'sitename' => env('CLOUDFLARE_SITE', 'test.com'),

    /*
    |--------------------------------------------------------------------------
    | Cloudflare Authentication Email
    |--------------------------------------------------------------------------
    |
    | Specify the authentication email to access Cloudflare.
    |
    */
    'auth_email' => env('CLOUDFLARE_AUTH_EMAIL', 'example@domain.com'),

    /*
    |--------------------------------------------------------------------------
    | Cloudflare Authentication Key
    |--------------------------------------------------------------------------
    |
    | Specify the authentication key to access Cloudflare.
    |
    */
    'auth_key' => env('CLOUDFLARE_AUTH_KEY', 'test_auth_key'),
];

用法

此包假设您已在Cloudflare仪表板中配置了页面规则。要配置页面规则,请参阅页面规则教程

根据页面规则的配置方式,Cloudflare将缓存我们网站中的每个页面一段时间。然后Cloudflare将从其缓存中提供页面,而不会将请求发送到应用程序服务器。当服务器有数据更新时,这会成为一个问题。因为Cloudflare不知道数据何时更新,所以它仍然向用户提供过时数据。我们需要清除Cloudflare中存储的缓存。

Cloudflare提供API端点,可以通过程序清除其缓存。此包利用这些API端点在模型更新时清除缓存。

要开始使用此包,您需要在 .env 文件中添加以下凭证

CLOUDFLARE_SITE=registered-cloudflare-sitename.com
CLOUDFLARE_AUTH_EMAIL=cloudflare-account@email.com
CLOUDFLARE_AUTH_KEY=cloudflare-auth-key

您可以在Cloudflare账户的个人资料页面API令牌部分找到Cloudflare Auth Key。将全局API键的值复制到您的 .env 文件中。

Suitmedia\Cloudflare\Model\Concerns\Cloudflare 添加到您的模型中

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Suitmedia\Cloudflare\Model\Concerns\Cloudflare;

class Post extends Model
{
    use Cloudflare;
}

Suitmedia\Cloudflare\Events\ModelHasUpdated 事件创建一个监听器

<?php

namespace App\Listeners;

use Illuminate\Contracts\Queue\ShouldQueue;
use Suitmedia\Cloudflare\Events\ModelHasUpdated;

class PurgeCloudflareCache implements ShouldQueue
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  ModelHasUpdated  $event
     * @return void
     */
    public function handle(ModelHasUpdated $event): void
    {
        //handle the Cloudflare purging
    }
}

将监听器注册到 EventServiceProvider

protected $listen = [
    'Suitmedia\Cloudflare\Events\ModelHasUpdated' => [
        'App\Listeners\PurgeCloudflareCache',
    ]
];

有几个方法可以用来清除Cloudflare缓存

  • 清除所有文件:清除Cloudflare缓存中的所有资源。

  • 按URL清除:通过指定URL从Cloudflare缓存中删除一个或多个文件。

  • 按缓存标签、主机或前缀清除:通过指定主机、相关缓存标签或前缀从Cloudflare缓存中删除一个或多个文件。请注意,这些方法仅适用于企业用户。

    // purge all files
    \CloudflareCache::purgeAll();
    
    // purge by urls
    $urls = [
        'http://example.com/posts/post-1',
        'http://example.com/posts/post-2',
    ];
    \CloudflareCache::purgeByUrls($urls);
    
    // purge by Cache-Tag (only available for Enterprise user)
    $tags = [
        'news-tag',
        'posts-tag',
    ];
    \CloudflareCache::purgeByTags($tags);
    
    // purge by hosts (only available for Enterprise user)
    $hosts = [
      'https://example.com',
      'https://domain.com',
    ];
    \CloudflareCache::purgeByHosts($hosts);
    
    // purge by prefixes (only available for Enterprise user)
    $prefixes = [
      '/news',
      '/products/product-1',
    ];
    \CloudflareCache::purgeByPrefixes($prefixes);

致谢

许可

MIT许可证(MIT)。有关更多信息,请参阅许可文件