locomotivemtl/charcoal-presenter

模型和视图之间的缺失炭层。

0.3.2 2020-07-02 15:23 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:48 UTC


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);