bit3 / service-aware-bundle
该包已被废弃,不再维护。没有推荐替代包。
symfony 的自动服务注入。
dev-develop / 1.1.x-dev
2016-09-25 11:57 UTC
Requires
- php: >=5.3
- symfony/dependency-injection: ~2.8|~3.0
- symfony/finder: ~2.8|~3.0
- symfony/http-kernel: ~2.8|~3.0
- symfony/property-access: ~2.8|~3.0
- symfony/yaml: ~2.8|~3.0
Requires (Dev)
Suggests
- braincrafted/bootstrap-bundle: Support the flash message service.
- doctrine/mongodb-odm: Supports the document manager service.
This package is not auto-updated.
Last update: 2022-02-01 12:41:25 UTC
README
服务感知包
创建具有依赖关系的服务可能会产生大量重复的元代码。例如
service: service_foo: class: Acme\DemoBundle\Service\Foo calls: - [setEntityManager, [@doctrine.orm.default_entity_manager]] - [setTranslator, [@translator]] service_bar: class: Acme\DemoBundle\Service\Bar calls: - [setTranslator, [@translator]] - [setValidator, [@validator]] service_zap: class: Acme\DemoBundle\Service\Zap calls: - [setEntityManager, [@doctrine.orm.default_entity_manager]] - [setTranslator, [@translator]] - [setValidator, [@validator]]
在类中
namespace Acme\DemoBundle\Service; class Foo { private $entityManager; private $translator; public function setEntityManager($entityManager) { $this->entityManager = $entityManager; } public function setTranslator($translator) { $this->translator = $translator; } }
namespace Acme\DemoBundle\Service; class Bar { private $translator; private $validator; public function setTranslator($translator) { $this->translator = $translator; } public function setValidator($validator) { $this->validator = $validator; } }
namespace Acme\DemoBundle\Service; class Zap { private $entityManager; private $translator; private $validator; public function setEntityManager($entityManager) { $this->entityManager = $entityManager; } public function setTranslator($translator) { $this->translator = $translator; } public function setValidator($validator) { $this->validator = $validator; } }
此包可以帮助您避免定义所有的setter调用和实现。它提供许多 *Aware
接口、抽象基类和特性。
如何使用
使用此包很简单,您只需要实现接口,并从 services.yml
中移除setter调用。
service: service_foo: class: Acme\DemoBundle\Service\Foo service_bar: class: Acme\DemoBundle\Service\Bar service_zap: class: Acme\DemoBundle\Service\Zap
在类中
namespace Acme\DemoBundle\Service; use Bit3\Symfony\ServiceAwareBundle\Doctrine\DoctrineBundle\EntityManagerAwareInterface; use Bit3\Symfony\ServiceAwareBundle\Doctrine\DoctrineBundle\EntityManagerAwareTrait; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Translator\TranslatorAwareInterface; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Translator\TranslatorAwareTrait; class Foo implements EntityManagerAwareInterface, TranslatorAwareInterface { use EntityManagerAwareTrait; use TranslatorAwareTrait; }
namespace Acme\DemoBundle\Service; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Translator\TranslatorAwareInterface; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Translator\TranslatorAwareTrait; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Validator\ValidatorAwareInterface; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Validator\ValidatorAwareTrait; class Bar implements EntityManagerAwareInterface, TranslatorAwareInterface, ValidatorAwareInterface { use TranslatorAwareTrait; use ValidatorAwareTrait; }
namespace Acme\DemoBundle\Service; use Bit3\Symfony\ServiceAwareBundle\Doctrine\DoctrineBundle\EntityManagerAwareInterface; use Bit3\Symfony\ServiceAwareBundle\Doctrine\DoctrineBundle\EntityManagerAwareTrait; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Translator\TranslatorAwareInterface; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Translator\TranslatorAwareTrait; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Validator\ValidatorAwareInterface; use Bit3\Symfony\ServiceAwareBundle\Symfony\FrameworkBundle\Validator\ValidatorAwareTrait; class Zap implements EntityManagerAwareInterface, TranslatorAwareInterface, ValidatorAwareInterface { use EntityManagerAwareTrait; use TranslatorAwareTrait; use ValidatorAwareTrait; }
很简单,对吧?
定义服务感知接口
您可以在您的 app/config/config.yml
中定义自己的服务感知接口。
service_aware: services: acme_demo_bundle.services.service_foo: interface: "Acme\DemoBundle\Service\FooAwareInterface" method: "setServiceFoo" service: "acme_demo_bundle.service_foo"