tboileau / clean-architecture
This package is abandoned and no longer maintained.
No replacement package was suggested.
Clean Architecture Library
1.4.3
2019-11-18 01:49 UTC
Requires
- php: ^7.1.3
- ext-ctype: *
- ext-iconv: *
- doctrine/annotations: 1.*
- symfony/dependency-injection: ~4.3
- symfony/options-resolver: ~4.3
Requires (Dev)
- phpunit/phpunit: ^8.4
README
Installation
Download with composer :
composer require tboileau/clean-architecture "1.*"
Create new use case
Create your request and configure it :
<?php namespace App\BusinessRules\Request; use Symfony\Component\OptionsResolver\OptionsResolver; use TBoileau\CleanArchitecture\BusinessRules\Request\Request; /** * Class FooRequest * @package App\BusinessRules\Request */ class FooRequest extends Request { /** * @inheritDoc */ public function configure(OptionsResolver $resolver): void { $resolver->setRequired("bar"); $resolver->setDefault("optional", "default_data"); } }
Same thing for your response :
<?php namespace App\BusinessRules\Response; use Symfony\Component\OptionsResolver\OptionsResolver; use TBoileau\CleanArchitecture\BusinessRules\Response\Response; /** * Class ResponseStub * @package TBoileau\CleanArchitecture\Tests\BusinessRules\Response> */ class FooResponse extends Response { /** * @inheritDoc */ public function configure(OptionsResolver $resolver): void { $resolver->setRequired("bar"); $resolver->setDefault("optional", "default_data"); } }
And now, you can implement your new use case :
<?php namespace App\BusinessRules\UseCase; use TBoileau\CleanArchitecture\BusinessRules\Annotation\UseCase; use TBoileau\CleanArchitecture\BusinessRules\Request\RequestInterface; use TBoileau\CleanArchitecture\BusinessRules\UseCase\UseCaseInterface; /** * Class Example * @package App\BusinessRules\UseCase * @UseCase( * request="App\BusinessRules\Request\FooRequest", * response="App\BusinessRules\Response\FooResponse" * ) */ class Example implements UseCaseInterface { /** * @inheritDoc */ public function execute(RequestInterface $request): array { return [ "bar" => "your_data", "optional" => $request->get("optional") ]; } }
Usage
<?php namespace App\UserInterface\Controller; use App\BusinessRules\UseCase\Example; use TBoileau\CleanArchitecture\BusinessRules\Response\ResponseInterface; use TBoileau\CleanArchitecture\BusinessRules\UseCase\UseCaseFactoryInterface; /** * Class FooController * @package App\UserInterface\Controller */ class FooController extends AbstractController { public function __invoke(UseCaseFactoryInterface $useCaseFactory) { /** @var ResponseInterface $response */ $response = $useCaseFactory->execute(Example::class, ["bar" => "required data"]); } }