andrewdyer / view-presenters
一个干净、可重用的解决方案,用于整理逻辑过多的杂乱无章的模型和视图!
2.0.0
2023-03-07 12:24 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.6
- symfony/var-dumper: ^5.4
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;