frostealth / php-presenter
简单视图展示器
v0.1.1
2015-12-14 11:47 UTC
Requires
- php: >=5.4
This package is not auto-updated.
Last update: 2024-09-14 18:28:22 UTC
README
您会遇到一些情况,需要在某些数据(可能是从您的实体中获取)在视图中显示之前执行一些逻辑。
- 这个逻辑应该直接硬编码在视图中吗? 不。
- 我们应该把逻辑存储在模型中吗? 不,再次不!
相反,利用视图展示器。这正是它们存在的意义!本软件包提供了一种实现方式。
安装
运行Composer命令以安装最新稳定版本
composer require frostealth/php-presenter @stable
使用方法
第一步是将您的展示器存储在某个地方——任何地方。这些将是非常简单的对象,它们除了格式化数据外不做任何事情。
这里是一个展示器的示例。
namespace app\presenters; use frostealth\presenter\Presenter; /** * Class ConcreteEntityPresenter * * @property-read string $fullName * @property-read string $birthDate */ class ConcreteModelPresenter extends Presenter { /** * @return string */ public function getFullName() { return implode(' ', [$this->firstName, $this->lastName]); } /** * @return string */ public function getBirthDate() { return date('y.M.d', $this->entity->birthDate); } }
这里是一个可展示的模型示例。
namespace app\models; use app\presenters\ConcreteModelPresenter; use frostealth\presenter\interfaces\PresentableInterface; class ConcreteModel implements PresentableInterface { /** @var string */ public $firstName; /** @var string */ public $lastName; /** @var string */ public $birthDate; /** @var ConcreteModelPresenter */ protected $presenter; /** * @return ConcreteModelPresenter */ public function presenter() { if ($this->presenter === null) { $this->presenter = new ConcreteModelPresenter($this); } return $this->presenter; } }
现在,在您的视图中,您可以这样做
<dl> <dt>Name</dt> <dd><?= $model->presenter()->fullName ?></dd> <dt>Birth Date</dt> <dd><?= $model->presenter()->birthDate ?></dd> </dl>
许可证
MIT许可证(MIT)。有关更多信息,请参阅LICENSE.md。