模拟 / 演示者
Analogue ORM 的简易查看演示者
5.4
2017-02-22 20:32 UTC
Requires
- analogue/orm: ~5.1
- nesbot/carbon: ~1.20
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-14 18:53:15 UTC
README
基于 Jeff Way 的 Laravel 易用视图演示者 https://github.com/laracasts/Presenter
有些场景需要在数据(可能是来自实体)显示之前执行一些逻辑。
- 这个逻辑应该直接写入视图吗?不。
- 我们应该将逻辑存储在模型中吗?再次不!
相反,利用视图演示者。这正是它们的作用!这个包提供了一个这样的实现。
安装
通过 Composer 引入此包。
{ "require": { "analogue/presenter": "0.2.*" } }
用法
第一步是将演示者存储在某个地方——任何地方。这些将是非常简单的对象,除了按需格式化数据外不做任何其他事情。
以下是一个演示者的例子。
use Analogue\Presenter\Presenter; class UserPresenter extends Presenter { public function fullName() { return $this->entity->first . ' ' . $this->entity->last; } public function accountAge() { return $this->entity->created_at->diffForHumans(); } }
接下来,在实体上引入 Analogue\Presenter\Presentable
特性。
以下是一个例子——可能是一个 Analogue User
实体。
<?php use Analogue\ORM\Entity; use Analogue\Presenter\Presentable; class User extends Entity { use Presentable; }
然后,在相关的实体映射中添加一个 public $presentable
属性
<?php use Analogue\ORM\EntityMap; // the UserPresenter class we created above use App\Http\Presenters\UserPresenter; class UserMap extends EntityMap { public $presenter = UserPresenter::class; // ... }
就这样!你已经完成了。现在,在你的控制器/视图中,你可以这样做
// in some controller return view("user", ["user" => $user->present()]);
<h1>Hello, {{ $user->fullName() }}</h1>
演示者还会传递对实体属性的任何调用:例如,$user->present()->first()
会返回 $user->first
属性——如果你将演示者而不是实体传递到模板中,这非常有用。
Laravel 集成
还包括一个 PresentBladeServiceProvider
,用于与 Laravel 和 Blade 模板语言一起使用。
这添加了 @presenteach
和 @endpresenteach
指令,允许你轻松遍历集合中每个实体的演示者
// config/app.php 'providers' => [ // ... Analogue\Presenter\PresentBladeServiceProvider::class, ]
<ul> @presenteach ($users as $user) <li>{{ $user->fullName() }}</li> @endpresenteach </ul>