darkperis / dpadn-laravel
ADN Cache Implementation for Laravel
Installs: 21
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/darkperis/dpadn-laravel
Requires
- guzzlehttp/guzzle: ^7.0.1
- illuminate/support: ^5.1|^6|^7|^8|^9|^10.0|^11.0|^12.0
README
This package allows you to use ADNcache together with Laravel.
It provides one facade:
- ADNCache facade to handle purging
Installation
Require this package using composer.
composer require darkperis/dpadn-laravel
Laravel uses Auto-Discovery, so you won't have to make any changes to your application, the two middlewares and facade will be available right from the beginning.
Steps for Laravel >=5.1 and <=5.4
The package can be used for Laravel 5.1 to 5.4 as well, however due to lack of Auto-Discovery, a few additional steps have to be performed.
In config/app.php you have to add the following code in your aliases:
'aliases' => [
...
'ADNCache' => Darkpony\ADNCache\ADNCache::class,
],
Copy adncache.php to config/:
Copy the package config/adncache.php file to your config/ directory.
important: Do not add the ServiceProvider under providers in config/app.php.
Steps for Laravel 5.5 and above
You should publish the package configuration, which allows you to set the defaults for the Cache-Control header:
php artisan vendor:publish --provider="Darkpony\ADNCache\ADNCacheServiceProvider"
Usage
The package comes with 2 functionalities: Setting the cache control headers for adncache and purging.
cache-control
You'll be able to configure defaults in the config/adncache.php file, here you can set the max-age (default_ttl), the cacheability (default_cacheability) such as public, private or no-cache or enable esi (esi) in the Cache-Control response header.
If the default_ttl is set to 0, then we won't return the Cache-Control response header.
You can control the config settings in your .env file as such:
ADNCACHE_API_KEY- Specify the API Token for your Service at the Edgeport PlatformADNCACHE_ENDPOINT- accepts endpointADNCACHE_ESI_ENABLED- acceptstrueorfalseto whether you want ESI enabled or not globally; DefaultfalseADNCACHE_DEFAULT_TTL- accepts an integer, this value is in seconds; Default:0ADNCACHE_DEFAULT_CACHEABILITY- accepts a string, you can use values such asprivate,no-cache,publicorno-vary; Default:no-cacheADNCACHE_GUEST_ONLY- acceptstrueorfalseto decide if the cache should be enabled for guests only; Defaults tofalse
You set the cache-control header for adncache using a middleware, so we can in our routes do something like this:
Route::get('/', function() { return view('frontpage'); })->middleware('cache.headers:public;max_age=2628000;etag');
purge
If we have an admin interface that controls for example a blog, when you publish a new article, you might want to purge the frontpage of the blog so the article appears in the overview.
You'd do this in your controller by doing
<?php namespace App\Http\Controllers; use ADNCache; class BlogController extends BaseController { // Your article logic here ADNCache::purge('/'); }
You can also purge everything by doing:
ADNCache::purge('*'); // or ADNCache::purgeAll();
One or multiple URIs can be purged by using a comma-separated list:
ADNCache::purge('/blog,/about-us,/'); // or ADNCache::purgeItems(['/blog', '/about-us', '/']);
Laravel Authentication
If you use authentication in Laravel for handling guests and logged-in users, you'll likely want to also separate the cache for people based on this.
This can be done in the .htaccess file simply by using the cache-vary on the Authorization cookie:
RewriteEngine On RewriteRule .* - [E=Cache-Vary:Authorization]
Note: In the above example we use Authorization, this may have a different name depending on your setup, so it has to be changed accordingly.