Pimple + yaml2pimple で依存性のコードからの分離をシンプルに実現
PimpleでDIを行うにしても
$container['key'] = function ($c) {...
みたいな初期化は自分で記述する必要があるのですが、
yaml2pimpleを使うと、
Symfony/DependencyInjection のように
yamlから自動的にインスタンス生成/依存性の注入を行ってくれます。
導入前
$container['apiAdapter'] = function ($c) { return new APIAdapter(); }; $container['api'] = function ($c) { return new TrueAPI($c['apiAdapter']); };
導入後
[PHP]
$container = new Container();
//yamlから依存性を読み込む
$builder = new ContainerBuilder($container);
$locator = new FileLocator(__DIR__);
$loader = new YamlFileLoader($builder, $locator);
$loader->load(__DIR__ . '/services.yml');
[yaml]
parameters: name: aaa # 実際使わなくても、必要がある services: apiAdapter: class: APIAdapter arguments: [@api] api: class: FakeAPI
yamlを書き換えるだけで依存を変更できるようになりました。
上記ページのようにSlim frameworkのController初期化を遅延させたりするのにも使えそうです。
https://github.com/gonzalo123/yml2pimple/commits/master
factory等のメソッド対応もマージ済のようです。
サンプルコード
github.com 前述の内容のサンプルです。(composer install → test.phpを実行)