warrickbayman / looker
该包已被 废弃 并不再维护。作者建议使用 thepublicgood/is-presentable 包代替。
一个基于 Jeffery Ways laracasts\Presenter 类的简单 PHP 视图表示器
1.0.1
2017-04-15 12:34 UTC
Requires (Dev)
- phpunit/phpunit: ^4.6
This package is auto-updated.
Last update: 2022-03-29 09:35:28 UTC
README
一个简单的 PHP 表示器库。
原因
将表示代码与模型分开是很常见的。当我刚开始用 PHP 时,我发现自己在做一些像这样的事情
//User.php class User extends Model { public function fullName() { return $this->first_name . ' ' . $this->last_name; } } // view.php <?php echo $user->fullName(); ?>
这是不好的。因此 Looker 将表示内容从模型中分离出来。它基于 Jeffery Way 为 Laracasts 编写的简单表示库。
安装
使用 composer
composer require warrickbayman/looker
使用方法
在模型中添加 Looker\Presentable 特性
use Looker\Traits\Presentable; class User { use Presentable; }
创建一个新的视图表示器,该表示器扩展了 Looker\Presenter 类
use Looker\Presenter; class User extends Presenter { public function fullName() { return $this->entity->first_name . ' ' . $this->entity->last_name; } }
现在,在你的视图中
echo $this->present()->fullName;
在表示器内部,$this->entity 是关联的模型。
默认情况下,Looker 将在 Http\Presenters 命名空间中查找表示器类,但你也可以更改它。在你的初始化代码中某处调用 Looker::init 方法,并传入表示器的类路径
Looker\Looker::init('Presenters');
如果你愿意,还可以传入一个 "后缀",例如将 "Presenter" 添加到表示器类的末尾
Looker\Looker::init('Presenters', 'Presenter');
现在 Looker 将查找 UserPresenter 而不是只查找 User。
覆盖模型成员
Looker 将自动覆盖模型成员。因此,你可以这样做
echo $user->present()->dateOfBirth;
即使 dateOfBirth 方法或属性在表示器中不存在。Looker 首先会在模型上查找具有相同名称的方法。如果不存在该方法,它将查找具有相同名称的属性。如果找不到方法或属性来调用,Looker 将抛出 OverrideFailed 异常。