ngmy / cached-object
Laravel 4 对象的缓存方案,受企业 Rails 启发
0.1.0
2014-03-30 12:31 UTC
Requires
- php: >=5.3.0
- illuminate/support: 4.1.*
Requires (Dev)
- orchestra/testbench: 2.1.*
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2024-09-26 06:44:49 UTC
README
Laravel 4 对象的缓存方案,受企业 Rails启发。
需求
Cached Object 需满足以下要求
-
PHP 5.3+
-
Laravel 4.0+
安装
将包添加到您的 composer.json
并运行 composer update
{ "require": { "ngmy/cached-object": "dev-master" } }
将以下内容添加到 app/config/app.php
中的服务提供者列表中
'Ngmy\CachedObject\CachedObjectServiceProvider',
将以下内容添加到 app/config/app.php
中的类别名列表中
'CachedObject' => 'Ngmy\CachedObject\CachedObject',
示例
基本用法
- 创建一个继承自 Eloquent 的物理模型
namespace App\Models\Physical; use Illuminate\Database\Eloquent\Model as Eloquent; class Movie extends Eloquent {}
- 创建一个继承自 CachedObject 的逻辑模型
namespace App\Models\Logical; use CachedObject; class Movie extends CachedObject { public static $VERSION = 1; public $id; public $name; public $lengthMinutes; public function __construct($id, $name, $lengthMinutes) { $this->id = $id; $this->name = $name; $this->lengthMinutes = $lengthMinutes; } }
您需要定义 $VERSION
。该属性用于为请求的对象创建一个唯一的缓存键。当您更改类的结构时,请增加此数字。
- 创建一个以 Uncached 开头的类名的未缓存版本逻辑模型
namespace App\Models\Logical; class UncachedMovie { public static function get($id) { $m = \App\Models\Physical\Movie::find($id); if (is_null($m)) { return null; } else { $movie = new Movie( $m->id, $m->name, $m->length_minutes ); return $movie; } } }
为了获取一个逻辑模型的对象,您需要定义一个以 get 开头的方法。该方法仅在对象不在缓存中时调用。
- 现在,您可以通过调用
Movie::get()
来从缓存中获取对象。
物理模型观察者
- 创建一个观察者。
例如,当您更新物理模型时重建缓存,以及当您删除物理模型时删除缓存,定义观察者如下
namespace App\Models\Logical; class MovieObserver { public function saved($m) { Movie::rebuild($m->id); } public function deleted($m) { Movie::clear($m->id); } }
- 将观察者注册到物理模型
\App\Models\Physical\Movie::observe(new \App\Models\Logical\MovieObserver);
更多用法
请参阅我的单元测试。