} } } class SyslogLogger { // ... public function info($message) { syslog(LOG_INFO, $message); } } class FlashMessage { // ... public function success($message) { echo $message; } } /// $data = ['username' => 'adrianpietka', 'password' => 'strong#password', 'email' => '*****@*****.**']; $flash = new FlashMessage(); $logger = new SyslogLogger(); $userRepository = new DoctrineUserRepository(); $userFactory = new RegisterFormUserFactory(); $registerService = new RegisterUserService($userRepository, $userFactory); $registerService->register($data, function ($user) use($logger, $flash) { $logger->info(sprintf('Created new account with email: %s', $user->getEmail())); $flash->success('Congratulations your registration has been successful.'); }); // @via zawarstwaabstrakcji.pl
} } class DoctrineUserRepository implements UserRepository { public function add(User $user) { // add user to storage var_dump($user); } } class RegisterUserService { private $users; private $factory; public function __construct(UserRepository $users, UserFactory $factory) { $this->users = $users; $this->factory = $factory; } public function register(array $data) { $this->users->add($this->factory->createUser($data)); } } /// $data = ['username' => 'adrianpietka', 'password' => 'strong#password', 'email' => '*****@*****.**']; $userRepository = new DoctrineUserRepository(); $userFactory = new RegisterFormUserFactory(); $registerService = new RegisterUserService($userRepository, $userFactory); $registerService->register($data); // @via zawarstwaabstrakcji.pl
/** * Register a new User * * @param RegisterUserCommand $command * @return Cribbb\Domain\Model\Identity\User */ public function registerUser(RegisterUserCommand $command) { $user = $this->registerUserService->register($command->email, $command->username, $command->password); $this->dispatcher->dispatch($user->release()); return $user; }
{ $this->logger = $logger; } public function execute(User $user) { $this->logger->info(sprintf('Created new account with email: %s', $user->getEmail())); } } class FlashMessageRegisterUserClosure implements RegisterUserClosure { private $flash; public function __construct($flash) { $this->flash = $flash; } public function execute(User $user) { $this->flash->succes(sprintf('Congratulations %s your registration has been successful.', $user->getEmail())); } } /// $data = ['username' => 'adrianpietka', 'password' => 'strong#password', 'email' => '*****@*****.**']; $userRepository = new DoctrineUserRepository(); $userFactory = new RegisterFormUserFactory(); $logger = new SyslogLogger(); $logRegisterUserClosure = new LogRegisterUserClosure($logger); $flash = new FlashMessage(); $flashMessageRegisterUserClosure = new FlashMessageRegisterUserClosure($flash); $registerService = new RegisterUserService($userRepository, $userFactory); $registerService->register($data, [$logRegisterUserClosure, $flashMessageRegisterUserClosure]); // @via zawarstwaabstrakcji.pl