n7olkachev / php-simple-delegator
Simple decorator trait for PHP
v1.0.0
2017-08-28 13:58 UTC
Requires
- php: ^7.0
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-10-23 21:37:47 UTC
README
Why?
You can watch Jeffrey Way's video from Laracon US 2017 with usage example: https://streamacon.com/video/laracon-us-2017/day-2-jeffrey-way (35:00)
Examples
Suppose, we want to create Presenter for our User model:
class User extends Model { protected $fillable = [ 'name', ]; } class UserPresenter { use SimpleDelegator; protected $user; public function __construct($user) { $this->user = $user; } protected function delegatee() { return $this->user; } public function formattedName() { return 'Decorated ' . $this->user->name; } } $decoratedUser = new UserPresenter($user); $decoratedUser->formattedName() // call to decorator method $decoratedUser->name // gets original name from User model
Or, we want to add some additional behavior to our class (as in Jeffrey's example):
class NotifyingThread { protected $thread; public function __construct($thread) { $this->thread = $thread; } public function addReply() { $reply = $this->thread->addReply(); Notification::send( $reply->mentionedUsers(), new YouWereMentioned($reply) ); } } $thread = new NotifyingThread($thread); $thread->addReply($data); // default logic + sending notification
Installation
You can install the package via composer:
composer require n7olkachev/php-simple-delegator
Next, add SimpleDelegator trait to your Decorator class:
use SimpleDelegator;
Testing
$ composer test
Credits
Sponsored by
Web agency based in Minsk, Belarus
License
The MIT License (MIT)