darkperis / dpadn-laravel
Laravel 的 ADN 缓存实现
Requires
- guzzlehttp/guzzle: ^7.0.1
- illuminate/support: ^5.1|^6|^7|^8|^9|^10.0
README
此包允许您使用 ADNcache 与 Laravel 一起使用。
它提供了一个外观
- ADNCache 外观用于处理清除
安装
使用 composer 安装此包。
composer require darkperis/dpadn-laravel
Laravel 使用自动发现,因此您不需要对应用程序进行任何更改,两个中间件和外观将从一开始就可用。
Laravel >=5.1 和 <=5.4 的步骤
该包也可以用于 Laravel 5.1 到 5.4,但由于缺乏自动发现,需要执行一些额外的步骤。
在 config/app.php
中,您必须在 aliases
中添加以下代码
'aliases' => [
...
'ADNCache' => Darkpony\ADNCache\ADNCache::class,
],
将 adncache.php
复制到 config/
将包 config/adncache.php
文件复制到您的 config/
目录。
重要:不要在 config/app.php
的 providers
下添加 ServiceProvider。
Laravel 5.5 及以上版本的步骤
您应该发布包配置,这将允许您设置 Cache-Control
标头的默认值
php artisan vendor:publish --provider="Darkpony\ADNCache\ADNCacheServiceProvider"
用法
该包包含两个功能:为 adncache 设置缓存控制头和清除。
缓存控制
您可以在 config/adncache.php
文件中配置默认值,在此您可以为 Cache-Control
响应头设置最大生存时间(default_ttl
)、缓存性(default_cacheability
)如公共、私有或无缓存,或者启用 esi(esi
)。
如果 default_ttl
设置为 0
,则不会返回 Cache-Control
响应头。
您可以在 .env
文件中控制配置设置,如下所示
ADNCACHE_API_KEY
- 在 Edgeport 平台上指定您的服务 API 令牌ADNCACHE_ENDPOINT
- 接受端点ADNCACHE_ESI_ENABLED
- 接受true
或false
以确定是否全局启用 ESI;默认false
ADNCACHE_DEFAULT_TTL
- 接受一个整数,此值以秒为单位;默认:0
ADNCACHE_DEFAULT_CACHEABILITY
- 接受一个字符串,您可以使用诸如private
、no-cache
、public
或no-vary
等值;默认:no-cache
ADNCACHE_GUEST_ONLY
- 接受true
或false
以决定是否只为访客启用缓存;默认false
您可以使用中间件设置 adncache 的缓存控制头,因此我们可以在路由中执行类似以下操作
Route::get('/', function() { return view('frontpage'); })->middleware('cache.headers:public;max_age=2628000;etag');
清除
如果您有一个控制例如博客的管理界面,当您发布新文章时,您可能想要清除博客的前页,以便文章出现在概览中。
您可以在控制器中这样做
<?php namespace App\Http\Controllers; use ADNCache; class BlogController extends BaseController { // Your article logic here ADNCache::purge('/'); }
您也可以通过这样做清除一切
ADNCache::purge('*'); // or ADNCache::purgeAll();
可以通过逗号分隔的列表使用一个或多个 URI 进行清除
ADNCache::purge('/blog,/about-us,/'); // or ADNCache::purgeItems(['/blog', '/about-us', '/']);
Laravel 身份验证
如果您使用 Laravel 的身份验证来处理访客和已登录用户,您可能还希望根据此对人员的缓存进行分离。
您可以在 .htaccess
文件中通过使用缓存变化在授权 cookie 上执行此操作
RewriteEngine On RewriteRule .* - [E=Cache-Vary:Authorization]
注意:在上述示例中,我们使用 Authorization
,这可能会根据您的设置有所不同,因此必须相应地进行更改。