locomotivemtl / charcoal-presenter
模型和视图之间的缺失炭层。
0.3.2
2020-07-02 15:23 UTC
Requires
- php: >=5.6.0 || >=7.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^5.7 || ^6.5
- squizlabs/php_codesniffer: ^3.0
README
模型和视图之间的缺失层。Presenter 可以将任何 数据模型(对象或数组)根据一个 转换器序列化为一个展示数组。
使用方法
最简单的使用方法,使用简单的数组转换器
$presenter = new Presenter([ 'id', 'name', 'display_date' ]); $model = $factory->create(Model::class); $viewData = $presenter->transform($model);
如果需要对对象进行操作,则首选可调用对象
可调用对象的签名必须是 array: callable(mixed $model)
。
$presenter = new Presenter(function($model) { return [ 'id', 'name', 'display_date' => $model->date->format('Y-m-d') ]; }); $model = $factory->create(Model::class); $viewData = $presenter->transform($model);
常见的转换器(或可定制的转换器,如下所示)应该包含在其自己的 Callable
类中
class MyTransformer { /** * @var string $dateFormat */ private $dateFormat; /** * @param string $dateFormat The date format. */ public function __construct($dateFormat) { $this->dateFormat = $dateFormat; } /** * @param mixed $model The model to transform. * @return array */ public function __invoke($model) { $displayDate = $obj->date->format($this->dateFormat); return [ 'id', 'name', 'display_date'=>$displayDate ]; } } $presenter = new Presenter(new MyTransformer('Y-m-d')); $model = $factory->create(Model::class); $viewData = $presenter->transform($model);