展示器

建议编辑

展示器是包装对象并为其提供附加功能的类。在 Orchid 中,展示器用于一致地格式化和展示数据,并帮助保持视图的整洁和有序。您可以将所有格式化和展示逻辑移到展示器类中,从而保持关注点分离。

创建一个展示器

在这个例子中,假设我们有一个 “Customer” 模型:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    protected $fillable = [
        'firstName',
        'lastName'
    ];
}

在这个类的实例被包装在一个展示器之前,您必须创建它:

namespace App\Presenters;

use Orchid\Support\Presenter;

class CustomerPresenter extends Presenter
{
    public function fullName(): string
    {
        return sprintf('%s %s',
            $this->entity->firstName,
            $this->entity->lastName
        );
    }
}

之后,我们可以这样使用它:

use App\Customer;
use App\Presenters\CustomerPresenter;

$customer = new Customer([
    'fistName' => 'Alexandr',
    'lastName' => 'Chernyaev'
]);
    
$presenter = new CustomerPresenter($customer);

$presenter->fullName();

注意 展示器接收模型的 firstNamelastName 属性,因为它没有这些属性。

通常,没有必要每次单独创建和传递展示器,为此,我们在模型中指明这个创建:

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Presenters\CustomerPresenter;

class Customer extends Model
{
    protected $fillable = [
        'firstName',
        'lastName'
    ];
    
    public function presenter(): CustomerPresenter
    {
        return new CustomerPresenter($this);
    }
}

注意。 许多平台功能在 presenter 方法中期望一个展示器。

现在它的使用变得更加简单:

use App\Customer;

$customer = Customer::findOrFail(1)->presenter()->fullName();

在集合中使用展示器

如果您想获取展示器列表,可以使用集合方法,例如:

use App\Customer;

$customers = Customer::limit(10)->get()->map->presenter();

foreach($customers as $customer)
{
    $customer->fullName();
}

为模型使用展示器是自动显示 Layouts 数据的常见做法。

我们的朋友