tboileau/clean-architecture

此包已被废弃且不再维护。未建议替代包。

清洁架构库

1.4.3 2019-11-18 01:49 UTC

This package is auto-updated.

Last update: 2021-04-02 09:07:08 UTC


README

安装

使用 composer 下载

composer require tboileau/clean-architecture "1.*"

创建新用例

创建您的请求并配置它

<?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");
    }
}

同样也针对您的响应

<?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");
    }
}

现在,您可以实现您的新用例

<?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")
        ];
    }
}

用法

<?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"]);
    }
}