模拟/演示者

Analogue ORM 的简易查看演示者

5.4 2017-02-22 20:32 UTC

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>