suitmedia / laravel-cloudflare
在Laravel中实现简单的Cloudflare缓存清除
Requires
- php: ^7.4|^8.0
- guzzlehttp/guzzle: ^7.0
- illuminate/database: ^8.0|^9.0|^10.0
- illuminate/support: ^8.0|^9.0|^10.0
Requires (Dev)
- ekino/phpstan-banned-code: ^1.0
- mockery/mockery: ~1.4
- nunomaduro/larastan: ^1.0|^2.0
- orchestra/testbench: ^6.0|^7.0|^8.0
- phpmd/phpmd: ^2.11
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-strict-rules: ^1.0
- phpunit/phpunit: ^9.5
- sebastian/phpcpd: ^6.0
README
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);
致谢
- richan-fongdasen/laravel-varnishable - 清除缓存流程受到了此包的启发。
许可
MIT许可证(MIT)。有关更多信息,请参阅许可文件。