thecodingmachine / service-provider-bridge-bundle
此Symfony Bundle 允许Symfony应用程序使用container-interop/service-provider中定义的服务提供者
Requires
- php: >=7.1.0
- container-interop/service-provider: ~0.4.0
- symfony/dependency-injection: ^2.3 | ^3.0
- symfony/framework-bundle: ^2.7 | ^3.0
- thecodingmachine/common-factories: dev-master
- thecodingmachine/discovery: ^1.2
- thecodingmachine/service-provider-registry: ^3.0
Requires (Dev)
- php: >=5.6
- phpunit/phpunit: ~5.0
- satooshi/php-coveralls: ^1.0
README
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
这很有用,因为大多数服务提供者都期望通过类/接口名称来获取条目。