前提・実現したいこと
複数種類のxmlファイルを読み込み、それぞれに対応したテーブルに格納するバッチをLaravelで実装しています。
各xmlの構成はバラバラですが、基本的な処理の流れは以下の通りです。
1.xmlを読み込む
↓
2.解析と整形
↓
3.テーブルにinsert
そのため1つのinterfaceファイルに対して、それをimplementsした各xmlファイル用の実装ファイルを用意し
Commandをextendsした各xmlファイル用のバッチのコンストラクタでinterfaceを引数に取ってインジェクションしたいと考えていますが、以下のエラーが発生するため実現できておりません。
小規模なプロジェクトですのでinterfaceではなく抽象クラスをextendsし、コンストラクタではこのクラスをインジェクションするという実装でも要件は満たせるのですが、せっかくなのでLaravelでよく見る実装で実現できればと思い質問させていただきました。
発生している問題・エラーメッセージ
Illuminate\Contracts\Container\BindingResolutionException : Target [App\Repositories\xxxx\Interfaceのクラス名] is not instantiable while building [App\Console\Commands\xxxx\バッチのクラス名].
該当のソースコード
php
1// interface 2namespace App\Repositories\xxxx; 3interface InterfaceA 4{ 5 public function aaa(); 6} 7 8// interfaceの実装 9namespace App\Repositories\xxxx; 10class ImplementsA implements InterfaceA 11{ 12 public function aaa(){} 13} 14 15// バッチ 16namespace App\Console\Commands\xxxx; 17class BatchA extends Command 18{ 19 private $obj; 20 public function __construct(InterfaceA $param) 21 { 22 $this->obj = $param; 23 } 24 public function handle() 25 { 26 $this->obj->aaa(); 27 } 28}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/27 23:45