该包已被 废弃 并不再维护。作者建议使用 thepublicgood/is-presentable 包代替。

一个基于 Jeffery Ways laracasts\Presenter 类的简单 PHP 视图表示器

1.0.1 2017-04-15 12:34 UTC

This package is auto-updated.

Last update: 2022-03-29 09:35:28 UTC


README

Build Status Stable Latest Unstable Version License

一个简单的 PHP 表示器库。

原因

将表示代码与模型分开是很常见的。当我刚开始用 PHP 时,我发现自己在做一些像这样的事情

//User.php

class User extends Model
{
    public function fullName()
    {
        return $this->first_name . ' ' . $this->last_name;
    }
}

// view.php
<?php echo $user->fullName(); ?>

这是不好的。因此 Looker 将表示内容从模型中分离出来。它基于 Jeffery Way 为 Laracasts 编写的简单表示库。

安装

使用 composer

composer require warrickbayman/looker

使用方法

在模型中添加 Looker\Presentable 特性

use Looker\Traits\Presentable;

class User
{
    use Presentable;
}

创建一个新的视图表示器,该表示器扩展了 Looker\Presenter

use Looker\Presenter;

class User extends Presenter
{
    public function fullName()
    {
        return $this->entity->first_name . ' ' . $this->entity->last_name;
    }
}

现在,在你的视图中

echo $this->present()->fullName;

在表示器内部,$this->entity 是关联的模型。

默认情况下,Looker 将在 Http\Presenters 命名空间中查找表示器类,但你也可以更改它。在你的初始化代码中某处调用 Looker::init 方法,并传入表示器的类路径

Looker\Looker::init('Presenters');

如果你愿意,还可以传入一个 "后缀",例如将 "Presenter" 添加到表示器类的末尾

Looker\Looker::init('Presenters', 'Presenter');

现在 Looker 将查找 UserPresenter 而不是只查找 User

覆盖模型成员

Looker 将自动覆盖模型成员。因此,你可以这样做

echo $user->present()->dateOfBirth;

即使 dateOfBirth 方法或属性在表示器中不存在。Looker 首先会在模型上查找具有相同名称的方法。如果不存在该方法,它将查找具有相同名称的属性。如果找不到方法或属性来调用,Looker 将抛出 OverrideFailed 异常。