offline / laravel-local-cache
此包已废弃且不再维护。未建议替代包。
在 Laravel 中本地缓存远程文件
v1.0.8
2016-03-11 15:57 UTC
Requires
- php: >=5.4.0
- ext-curl: *
- illuminate/support: ~5.0
Requires (Dev)
- mikey179/vfsstream: dev-master
- phpspec/phpspec: ~2.0
README
[](https://travis-ci .org/OFFLINE-GmbH/laravel-local-cache)
此包允许您在本地文件系统中缓存远程文件。如果您尝试减少从如 Amazon S3 这样的服务请求文件时的带宽消耗,这很有用。
该实现还允许您从缓存中提供文件,这些文件可能在某些时候在远程位置不可用。
安装它
要安装此包,请将其包含在您的 composer.json
中,并运行 composer update
"require": {
"offline/laravel-local-cache": "~1.0"
}
将服务提供者添加到您的 config/app.php
中的 provider
数组
'Offline\LocalCache\LocalCacheServiceProvider'
在您的 config/app.php
中为外观添加别名
'LocalCache' => 'Offline\LocalCache\Facades\LocalCache',
发布配置
$ php artisan vendor:publish --provider="Offline\LocalCache\LocalCacheServiceProvider"
创建目录 storage/localcache
(在 config/localcache.php
中编辑 storage_path
设置以更改此位置)。
使用它
要缓存文件,请使用 getCachedHtml
方法。文件将被下载并存储到磁盘上。该方法返回文件的本地 URL。
$string = 'http://www.offlinegmbh.ch/file.jpg';
// returns http://yoursite/cache/{hash}
var_dump(LocalCache::getCachedHtml($string));
默认情况下,生成一个 /cache/{hash}
路由,该路由以正确的 MIME 类型提供文件的内容。要更改路由,请编辑 config/localcache.php
中的 route
设置。
getCachedHtml
方法与包含任意数量 URL 的任何字符串一起工作。它会相应地提取和替换链接。
$string = '<p>http://www.offlinegmbh.ch/file.jpg</p><p>http://www.offlinegmbh.ch/file2.jpg</p>'; // <p>http://yoursite/cache/{hash1}</p><p>http://yoursite/cache/{hash2}</p> var_dump(LocalCache::getCachedHtml($string));
要防止 URL 被缓存,请使用 @
符号作为前缀
$string = '<p>@http://dont-cache-me/file.jpg</p>'; // <p>http://dont-cache-me/file.jpg</p> var_dump(LocalCache::getCachedHtml($string));
示例中间件
此示例中间件缓存模板中引用的所有外部文件,并替换 URL。
<?php
namespace App\Http\Middleware;
use Closure;
use Offline\LocalCache\Facades\LocalCache;
class LocalCacheMiddleware
{
/**
* Cache and replace links to external assets.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
$response->setContent(
LocalCache::getCachedHtml($response->getContent())
);
return $response;
}
}
将其添加到您的 app/Http/Kernel.php
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'localcache' => \App\Http\Middleware\LocalCacheMiddleware::class,
];
并在您的 routes.php
或控制器中使用它。
Route::get('/', [
'uses' => 'PageController@index',
'middleware' => ['localcache']
]);