thecodingmachine/service-provider-bridge-bundle

此Symfony Bundle 允许Symfony应用程序使用container-interop/service-provider中定义的服务提供者

v0.4.1 2017-09-21 09:51 UTC

This package is auto-updated.

Last update: 2024-09-14 17:13:33 UTC


README

Scrutinizer Code Quality Build Status Coverage Status

container-interop/service-provider bridge bundle

service-provider导入到Symfony应用程序中,其中定义在container-interop

使用方法

安装

TheCodingMachine\Interop\ServiceProviderBridgeBundle\InteropServiceProviderBridgeBundle添加到您的内核中(在app/AppKernel.php文件中)。

AppKernel.php

    public function registerBundles()
    {
        $bundles = [
            ...
            new \TheCodingMachine\Interop\ServiceProviderBridgeBundle\InteropServiceProviderBridgeBundle()
        ];
        ...
    }

使用thecodingmachine/discovery的使用方法

桥接Bundle将使用thecodingmachine/discovery来自动发现项目中服务提供者的服务。如果您正在加载的服务提供者在Discovery上发布了自己,那么您就完成了。服务提供者中声明的服务现在在Symfony容器中可用!

手动声明使用方法

如果您使用的服务提供者没有使用thecodingmachine/discovery发布自己,您将不得不在Bundle的构造函数中手动声明它。

AppKernel.php

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            ...
            new \TheCodingMachine\Interop\ServiceProviderBridgeBundle\InteropServiceProviderBridgeBundle([
                new MyServiceProvide1(),
                new MyServiceProvide2()
            ])
        ];
        ...
    }
}

或者,您也可以传递服务提供者类名。这很有趣,因为服务定位器Bundle只有在需要服务时才会实例化服务提供者。因此,您可以提高应用程序的性能。

AppKernel.php

    public function registerBundles()
    {
        $bundles = [
            ...
            new \Puli\SymfonyBundle\PuliBundle(),
            new \TheCodingMachine\Interop\ServiceProviderBridgeBundle\InteropServiceProviderBridgeBundle([
                MyServiceProvide1::class,
                MyServiceProvide2::class
            ])
        ];
        ...
    }

最后,如果您需要向服务提供者的构造函数传递参数,您可以这样做,通过传递一个数组

AppKernel.php

    public function registerBundles()
    {
        $bundles = [
            ...
            new \Puli\SymfonyBundle\PuliBundle(),
            new \TheCodingMachine\Interop\ServiceProviderBridgeBundle\InteropServiceProviderBridgeBundle([
                [ MyServiceProvide1::class, [ "param1", "param2" ] ],
                [ MyServiceProvide2::class, [ 42 ] ],
            ])
        ];
        ...
    }

禁用thecodingmachine/discovery

您可以通过将false作为Bundle的第二个参数来禁用Discovery

AppKernel.php

    public function registerBundles()
    {
        $bundles = [
            ...
            // false is passed as second argument. Puli discovery will be disabled.
            new \TheCodingMachine\Interop\ServiceProviderBridgeBundle\InteropServiceProviderBridgeBundle([
                ...
            ], false)
        ];
        ...
    }

默认别名

默认情况下,此包提供了一个CommonAliasesServiceProvider,它将创建以下别名

  • logger => Psr\Log\LoggerInterface
  • cache.app => Psr\Cache\CacheItemPoolInterface
  • twig => Twig_Environment

这很有用,因为大多数服务提供者都期望通过类/接口名称来获取条目。