dms/chainlink-bundle

Chainlink的包装器,提供将责任链模式直接集成到Symfony中的解决方案。提供了标签,可以将处理器注入到定义好的配置上下文中。


README

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

此包包装了Chainlink库,并基于Symfony服务标签提供了一个即插即用的解决方案,用于实现责任链模式。它允许您通过配置设置多个上下文,并定义哪些标签为每个上下文提供处理器。

安装

要获取包代码,请运行

composer require dms/chainlink-bundle

编辑您的AppKernel.php文件以实例化包

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...

        new DMS\Chainlink\Bundle\DMSChainlinkBundle(),
    );
}

如果您正在寻找其他框架,请访问Packagist以获取包装器和适配器。

使用

要注册新的上下文并将处理器分配给它们,只需在您的config.yml中添加配置条目。

dms_chainlink:
    contexts:
        my_new_context:
            tag: mycontext.handler

该包将寻找任何带有上面定义的tag标签的服务,并将它们作为处理器注入到您请求的上下文中。

要处理请求,从容器中检索上下文并将输入传递进去。

$this->container->get('dms_chainlink.context.my_new_context')->handle($input);

//or its also aliased at

$this->container->get('my_new_context')->handle($input);

用作处理器的服务需要实现Chainlink的HandlerInterface。处理器负责识别它负责哪个输入,接口中包含一个handles方法来处理。

链处理顺序

从版本0.3开始,Chainlink支持使用在Symfony中广泛使用的优先级系统来排序处理器。处理器将从高到低被调用。

# src/Vendor/MyBundle/Resources/config/services.yml

my_service:
  class: MyHandler
  tag:
    - { name: my_new_context, priority: 1 }

my_other_service:
  class: OtherHandler
  tag:
    - { name: my_new_context, priority: 9001 }

在这种情况下,如果OtherHandlerMyHandler可以处理该用例,则将首先调用OtherHandler,然后调用MyHandler