kaszko/class-resolver-bundle

该包最新版本(v1.0.3)没有可用的许可信息。

将类解析器组件集成到Symfony

v1.0.3 2022-03-30 19:24 UTC

README

Build Status Latest Stable Version Total Downloads Latest Unstable Version

class-resolver 集成到Symfony的Bundle。有关本地特性的信息,请参阅 class-resolver 文档

安装

您可以使用composer安装此组件:composer require kassko/class-resolver-bundle:some_version

您还需要将Bundle注册到您的内核中

public function registerBundles()
{
    $bundles = array(
        new Kassko\Bundle\ClassResolverBundle\KasskoClassResolverBundle(),
    );
}

使用类解析器的两种不同方式

语义配置示例

kassko_class_resolver:
    container_adapter_class: Kassko\Bundle\ClassResolverBundle\Adapter\Container\SymfonyContainerAdapter # default
    resolver_aliases:
    	alias_one: my_container_resolver_service_one
    	# - {alias_one: my_container_resolver_service_one}
    resolvers:
        container:
            [my_container_resolver_service_one, my_container_resolver_service_two]
            # or
            # - { resolver_service: my_container_resolver_service_one, resolver_aliases: [alias_two] }
            # - { resolver_service: my_container_resolver_service_two }
        map:
            map_one:
                resolver_service: my_map_resolver_service_one
                items:
                    "My\\Namespace": my_service_one
                    "My\\Namespace\\Two": my_service_two
                    # or
                    # - { class: "My\\Namespace", service: my_service_one }
                    # - { class: "My\\Namespace\\Two", service: my_service_two }
        factory_adapter:
            - resolver_service: my_factory_adapter_resolver_service_one
              adapted_service: my_adapted_service_one
              support_method: supports
              resolve_method: resolve
            - resolver_service: my_factory_adapter_resolver_service_two
              adapted_service: my_adapted_service_two
              support_method: supports
              resolve_method: resolve 
            # or with the following syntax
            - {resolver_service: adapter_one, adapted_factory: resolver_one} # etc            
        static_factory_adapter:
            - resolver_service: my_static_factory_adapter_resolver_service_one
              adapted_class: my_static_resolver_class
              support_method: supports
              resolve_method: resolve
            - resolver_service: my_static_factory_adapter_resolver_service_two
              adapted_class: my_static_resolver_class
              support_method: supports
              resolve_method: resolve
            # or with the following syntax
            - {resolver_service: adapter_two, adapted_factory: resolver_two} # etc           

您可以在语义配置中定义一些类解析器,并在您的服务配置文件中使用它们

<service id="some_service_a" class="stdClass">
    <argument id="my_map_resolver_service_one" type="service" />
</service>

<service id="some_service_b" class="stdClass">
    <argument id="my_factory_adapter_resolver_service" type="service" />
</service>

<service id="some_service_c" class="stdClass">
    <argument id="my_static_factory_adapter_resolver_service" type="service" />
</service>

您还可以动态定义一些类解析器,并将它们与从您的服务配置文件中提供的 [class, service] 对配对

您将服务如 [class, service] 对注册到您动态创建的解析器中

<service id="some_service_a" class="stdClass">
    <argument id="my_container_resolver_service_one" type="service" />
    <!-- create a resolver on the fly identified by its group -->
    <tag name kassko_class_resolver.add group="a_group_name_choosen_by_you"> 
</service>

<service id="some_service_b" class="stdClass">
    <argument id="my_container_resolver_service_one" type="service" />
    <!-- use the resolver previously created in the service `some_service_a` -->
    <tag name kassko_class_resolver.add group="a_group_name_choosen_by_you"> 
</service>

然后将适当的解析器(通过其组标识)注入到相关服务中

<service id="some_service_c" class="stdClass">
    <tag name kassko_class_resolver.inject group="a_group_name_choosen_by_you">
</service>

组是一种不操作某些服务的方式。

这种方式的优势在于在不更改语义配置的情况下添加新的解析器,并且只需要使用一个文件(服务配置文件)即可工作。

有关此功能的更多信息,请参阅 更详细的文档

最后,您可以使用在语义配置中定义的一些类解析器,并从您的服务配置文件中提供它们

您将服务如 [class, service] 对注册到已存在的解析器 my_container_resolver_service_one

<service id="some_service_a" class="stdClass">
    <tag name kassko_class_resolver.add service="my_container_resolver_service_one">
</service>

将解析器 my_container_resolver_service_one 注入需要它的服务中

<service id="some_service_a" class="stdClass">
    <argument id="my_container_resolver_service_one" type="service" />
</service>