Цель [App \ Interfaces \ IPostRepository] не создается при сборке - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь сделать шаблон репозитория в 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;
}

Как мне это исправить?

1 Ответ

0 голосов
/ 01 сентября 2018

Я не знаю, что заставило вас использовать 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 метод. Вместо этого я использовал метод связывания ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...