andrewdyer/view-presenters

一个干净、可重用的解决方案,用于整理逻辑过多的杂乱无章的模型和视图!

2.0.0 2023-03-07 12:24 UTC

This package is auto-updated.

Last update: 2024-09-07 15:33:22 UTC


README

一个干净、可重用的解决方案,用于整理逻辑过多的杂乱无章的模型和视图!

许可

许可协议为MIT。完全免费用于私人或商业项目。

安装

composer require andrewdyer/view-presenters

使用方法

$user = new App\Models\User;
$user->setForename('Andrew');
$user->setSurname('Dyer');

var_dump($user->present()->name); // Andrew Dyer

视图表示器

所有表示器都必须是Anddye\ViewPresenters\PresenterInterface的实例,并且最好扩展Anddye\ViewPresenters\AbstractPresenter - 它将默认实现所需的接口。

namespace App\Presenters;

use Anddye\ViewPresenters\Presenter;
use App\Models\User;

class UserPresenter extends Presenter
{
    protected User $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function defaultAttributes(): array
    {
        $data = [];
        $data['id'] = $this->user->getId();
        $data['forename'] = $this->user->getForename();
        $data['surname'] = $this->user->getSurname();

        return $data;
    }

    public function name(): string
    {
        return $this->user->getForename() . ' ' . $this->user->getSurname();
    }
}

使用表示器

模型可以使用Anddye\ViewPresenters\UsesPresentersTrait特质来访问present()方法。表示器类型必须在$presenters属性中定义。默认情况下,当调用此方法时将使用default类型。可以通过将键作为参数传递给present()方法来定义和使用自定义类型。

namespace App\Models;

use Anddye\ViewPresenters\HasPresenters;
use App\Presenters\UserPresenter;
use App\Presenters\UserSubscriptionPresenter;

class User
{
    use HasPresenters;

    protected int $id;
    protected string $forename;
    protected string $surname;
    protected array $presenters = [
        'default' => UserPresenter::class,
        'subscription' => UserSubscriptionPresenter::class
        // ...
    ];

    // ...

}
// ...

$data = $user->present('subscription')->defaultAttributes;