metglobal / composer-service-handler
此包已被废弃且不再维护。没有推荐替代包。
用于从类注解生成服务定义的Composer脚本处理器
v1.0.1
2021-06-14 14:18 UTC
Requires
- php: >=7.2.5
- doctrine/annotations: ^1.4
- symfony/finder: ^3.4|^4.4|^5.2
- symfony/yaml: ^3.4|^4.4|^5.2
Requires (Dev)
- composer/composer: ^2.0
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2023-11-14 19:42:11 UTC
README
基于Symfony注解的services.yml生成器
使用案例
最小化由基于单文件的服务.yml依赖注入引起的冲突问题
安装
-
使用composer安装
composer require metglobal/composer-service-handler
-
在composer.json中添加"symfony-scripts"列表中的"Metglobal\\ServiceHandler\\ScriptHandler::buildServices"命令。它应该看起来像以下这样
"scripts": { ... "post-install-cmd": [ "Metglobal\\ServiceHandler\\ScriptHandler::buildServices", "@auto-scripts" ], "post-update-cmd": [ "Metglobal\\ServiceHandler\\ScriptHandler::buildServices", "@auto-scripts" ], "post-autoload-dump": [ "Metglobal\\ServiceHandler\\ScriptHandler::buildServices" ], }
-
定义哪些包将在app文件夹中自动生成services.yml
service.yml
parameters: locale: en service_handler: App\: resource: 'src/' exclude: 'src/{Controller,Entity,Exclude,Repository,Kernel.php}'
-
在composer.json文件extra部分中将作为
metglobal-services
处理的文件定义composer.json
"extra": { ... "metglobal-services": { "file": "config/services.yaml" } }
-
将
services.yml
添加到.gitignore
使用
每次执行composer install
或composer update
命令后,services.yml将自动生成
在仓库类中使用@Service
注解
namespace App\Repository; use Metglobal\ServiceHandler\Annotation\Service; /** * @Service( * id="app.repository.my_repository", * factory= {"@doctrine.orm.default_entity_manager", "getRepository"}, * arguments={"App:MyEntity"}, * calls={ * {"setSender", {"@App\Mailer\Sender"}} * } * ) */ class MyRepository { }
在事件监听器类中使用@Service
注解
namespace App\EventListener; use Metglobal\ServiceHandler\Annotation\Service; use Metglobal\ServiceHandler\Annotation\Tag; /** * @Service( * id="app.event_listener.my_listener", * arguments={ * "@App\Repository\MyRepository", * "@App\Mailer\Sender" * }, * tags={ * @Tag(name="kernel.event_listener", event="success", method="onSuccess"), * @Tag(name="kernel.event_listener", event="fail", method="onFail") * } * ) */ class MyListener { }
@Service
注解的使用与基于services.yml的定义没有区别。