我正在尝试在laravel中执行存储库模式,我有很多模型,所以我像下面这样绑定它们
public function register()
{
$intPath = "App\Interfaces\\";
// models come from models() method
foreach ($this->models() as $model) {
$interface = $intPath."I" . $model . "Repository::class";
$repoPath = "App\Repositories\\".$model."\\";
$this->app->singleton($interface, function ($app) use ($model,$repoPath) {
$cacheName = $repoPath.$model . "CacheRepository";
$eloquentName = $repoPath.$model . "EloquentRepository";
return new $cacheName(new $eloquentName);
});
}
}
我检查接口和存储库路径,这似乎是正确的。但是仍然给我那个错误
public function __construct(IPostRepository $repository)
{
$this->post = $repository;
}
我该如何解决?
答案 0 :(得分:1)
我不知道您为什么使用singleton
。如果我在你家,我会走这样的样子:
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$repositoryFileNames = [
// Write your RepositoryName here in quotes
];
foreach ($repositoryFileNames as $key => $fileName) {
// Contracts are interfaces only
$this->app->bind(
"App\\Repositories\\Contracts\\{$fileName}Contract",
"App\\Repositories\\Classes\\{$fileName}"
);
}
}
注意foreach循环内的文件路径。您只使用了1个反斜杠,而我使用了2个。您需要使用相同的斜杠。2个反斜杠,它应该可以解决您的错误。
此外,请注意,我还没有使用singleton
方法。相反,我使用了bind方法。