ziffmedia/laravel-cloudflare

一个Laravel Nova工具。


README

功能

  • Laravel Nova工具,用于添加缓存清除页面,以便手动批量清除特定URL。
  • Laravel Nova字段,用于清除特定URL或资源的缓存标签。
  • 选择将工具、字段或两者都包含在项目中。
  • 选择使用URL、缓存标签头或两者来清除Cloudflare缓存。
Nova工具

Nova Tool Screenshot

Nova字段

Nova Field Screenshot

安装

  • 将包安装到您的Laravel应用程序中。
composer require ziffmedia/laravel-cloudflare
  • 发布配置文件到您的应用程序。
   php artisan vendor:publish --provider="ZiffMedia\LaravelCloudflare\CloudflareServiceProvider" --tag="config" 
  • 在.env文件中提供您的Cloudflare区域和API密钥的新配置文件。

Nova工具集成

为了在您的Nova实例中提供缓存清除工具,您必须使用NovaServiceProvider注册该工具。

// app/Providers/NovaServiceProvider.php

use ZiffMedia\LaravelCloudflare\Nova\Tools\LaravelCloudflareTool;

public function tools()
{
    return [
        // ...,
        LaravelCloudflareTool::make()
    ];
}

有关向工具添加权限的信息,请参阅Nova 文档

注意:该工具仅适用于URL;如果只使用工具或URL清除,则无需设置缓存标签。

Nova字段集成

要为任何资源提供缓存清除按钮,您必须引用该字段并确保您已设置适当的清除方法(URL或缓存标签)。

// app/Nova/

use ZiffMedia\LaravelCloudflare\Nova\Fields\ClearCacheButton;

public function fields(Request $request)
{
    ClearCacheButton::make('Cloudflare Cache')
        ->purgeUrls(
            ['https://www.example.com', 'https://www.example.com/page']
        )
        ->purgeTags(function () {
            return $this->cloudflareTagsToClear(); // In order to use this method, you must setup Cache Tags (see below)
        })
        ->hideWhenCreating()
}

Cloudflare缓存-标签头集成

Cloudflare具有使用特殊缓存-标签头请求以立即清除多个页面的能力。如果您只想使用URL清除,则可以跳过此步骤。为了设置缓存-标签头,请按照以下步骤操作

  • 添加Cloudflare缓存-标签中间件以自动将缓存-标签头添加到所有请求。由于Cloudflare会自动删除头信息,您可以在请求的查询字符串中使用debug_cache_tags=1来查看头信息的输出。
// app/Http/Kernel.php

use ZiffMedia\LaravelCloudflare\Middleware\CloudflareTagHeaders;

protected $middlewareGroups = [
    'web' => [
        // ...
        CloudflareTagHeaders::class,
    ]
];
  • 添加Cloudflare控制器关注点,告诉页面要为请求头提供哪些标签。以下是一个针对文章资源的示例实现
// app/Http/Controllers/ArticleController.php

use ZiffMedia\LaravelCloudflare\Controllers\Concerns\CloudflareTaggable;

class ArticleController extends Controller
{
    use CloudflareTaggable;

    public function index()
    {
        // For a collection of models
        $articles = Article::get();
        $this->addCloudflareTagsFromCollection($articles); // This will add a tag to the page for each model in the collection
        
        // For a single model
        $article = Article::first();
        $this->addCloudflareTagFromModel($article); // This will add a tag to the page for a single model
                
        return view(...);
    }
}
  • 添加Cloudflare模型关注点,告诉头信息要使用哪个标签。此外,可以覆盖cloudflareTagsToClearcloudflareTag方法,以允许自定义标签或清除其他资源。以下是一个针对文章模型的基本示例实现
// app/Models/Article.php

use ZiffMedia\LaravelCloudflare\Models\Concerns\CloudflareTaggable;

class Article extends Model
{
    use CloudflareTaggable;
    // ...   
}

配置选项

  • purge_enabled:允许开启或关闭清除功能
  • email:用于通过Cloudflare API进行身份验证的电子邮件地址
  • key:用于通过Cloudflare API进行身份验证的密钥
  • zone:用于Cloudflare API的区域
  • domains:允许清除的域名数组。所有URL清除请求都将与这些域名进行验证,如果有的话。