nextdev/symfony-adr

此包已被废弃,不再维护。作者建议使用 pitch/symfony-adr 包。

此包在使用 Symfony 应用程序时更容易遵循 ADR 模式。

维护者

详细信息

gitlab.com/nextdev/symfony-adr

安装: 8

依赖者: 0

建议者: 0

安全: 0

类型:symfony-bundle

此包尚未发布版本,信息有限。


README

此包在使用 Symfony 应用程序时更容易遵循 ADR 模式。

用法

将控制器转换为动作

通过将响应器逻辑从动作逻辑中移除到控制器外部来解耦响应器逻辑。只需返回负载即可!

如果控制器返回的不是 Response 对象,Symfony 会触发 kernel.view 事件。

现在,您可以通过实现 ResponseHandlerInterface 来代替注册大量事件监听器进行迭代。

namespace App\Responder;

use nextdev\AdrBundle\Responder\ResponseHandlerInterface;
use nextdev\AdrBundle\Responder\ResponsePayloadEvent;
use Symfony\Component\HttpFoundation\Response;

use App\Entity\MyPayload;

class MyPayloadHandler implements ResponseHandlerInterface
{
    public function getSupportedPayloadTypes(): array
    {
        return [
            MyPayload::class,
        ];
    }

    public function handleResponsePayload(
        ResponsePayloadEvent $payloadEvent
    ): void {
        $response = new Response();

        // prepare the response
        if ($payloadEvent->request->getAttribute('_foo') === 'bar') {
            // adjust the response according to the request
        }

        $payloadEvent->payload = $response;
    }
}

如果您的处理类作为服务存在于您的 config/services.yaml 中,它将在控制器返回 MyPayload 对象时被发现和使用。

默认配置下,只需将类放入 src/Responder/MyPayloadHandler.php 即可。

将某些异常视为响应负载

一个健壮的领域将具有严格的约束,并在出现意外的或无效的条件时抛出异常,对于每个通过控制器/动作的异常,Symfony 会触发一个 kernel.exception 事件。

您可以保留此事件以处理真正的意外行为,而无需在控制器中重复类似的 try-catch 块。

定义所有控制器应捕获的异常,并将其视为响应负载

nextdev_adr:
    graceful:
        - { value: RuntimeException, not: [BadRuntime, OtherBadRuntime] }
        - Foo
        - { not: GloballyBadException }
        - { value: Bar, not: BadBar }

如果安装了 SensioFrameworkExtraBundle,您可以按注解为每个控制器方法定义额外的规则

namespace App\Controller;

use nextdev\AdrBundle\Configuration\Graceful;

class MyController
{
    /**
     * @Graceful(not={LocallyBadException})
     * @Graceful(LocallyGoodException, not={ButNotThisOne, OrThatOne})
     */
    public function __invoke(
        Request $request
    ) {
        /// ...
    }
}

规则按出现顺序应用,方法规则在全局规则之后。

现在,您可以创建一个如上所述的 App\Responder\MyGoodRuntimeExceptionHandler