tatilcom / 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 not auto-updated.
Last update: 2024-09-25 12:20:33 UTC
README
Symfony基于注解的services.yml生成器
使用场景
最小化基于单文件services.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" ], }
-
定义哪些包将在应用目录中自动生成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的定义没有区别。