リポジトリパターンを使用してこの問題が発生しました。現在私はインターフェイスとそれを実現するためのカスタムクラスを使用し、それをコントローラの構造にヒントし、Laravelのためにリポジトリの依存関係を自動的かつ再帰的に解決します。Laravelの依存関係注入による抽象クラスの依存関係の解決
私はまた、サービスプロバイダで次の操作を行います。
$this->app->bind(path/to/repoInterface,path/to/implementationClass)
しかし、私はこれらのリポジトリをコード化する方法のため、コードの重複を避けるために、私はすべてに共通するメソッドを持つ抽象クラスを作成しましたこれらのリポジトリ。
abstract class CommonRepo{
public function __construct(SomeModelClass model){}
public function commonMethod(){//Code here}
そして、私のリポジトリは以下の構造を有する:次のようにこのクラスはある
public class ExampleRepository extends CommonRepo implements ExampleRepositoryI{
public function __construct(){
parent::__construct();
}
}
Laravelは、このエラーを与えるので、これを好きではない:
だから、Argument 1 passed to path/to/repo/CommonRepo::__construct() must be an instance of path/to/model/SomeModelClass, none given, called in...
、明らかにCommonRepoクラスの依存関係を解決していませんが、通常のリポジトリの依存関係を解決します。それが可能だ場合、私は、希望
、どのように私は、それから、そのクラスの依存関係を解決することができます 新しいオペレータに関連する何かをすることなく、タイプヒンティング(Laravelの道)を使用するには?
public class ExampleRepository extends CommonRepo implements ExampleRepositoryI
{
public function __construct(SomeModelClass $model){
parent::__construct($model);
}
}
または
public class ExampleRepository extends CommonRepo implements ExampleRepositoryI
{
public function __construct(){
parent::__construct(App::make(SomeModelClass::class));
}
}
あなたはこのhttp://meanderingsoul.com/dev/2015/04/dependency-injection-with-inherited-controllers-in-laravel-5 –
でインスピレーションを得ることができますか親コンストラクタを呼び出すこと以外に何もする必要がない場合は、単にExampleRepositoryクラスからコンストラクタを削除してください。 –
@MateuszDrost私はそれをタイプしませんでしたが、もっとする必要があります。それぞれのリポジトリは独自の依存関係を持っています(私はファサードの悪用を好まないので、たぶんEloquent Modelsです)。 – user2430929