Я нашел много вопросов о своей проблеме и попробовал (я думаю) все решения, но я не могу заставить их работать. Вероятно, я пропускаю что-то очень легкое.Injection in Repository
Я использую Laravel 5. Я пытаюсь реализовать шаблон репозитория. У меня есть яркая модель '\ Notos \ Kind'.
Тогда у меня есть этот интерфейс:
namespace Notos\Contracts;
interface Kind
{
public function findByName($name);
}
Мой Repository выглядит следующим образом:
namespace Notos\Repository;
use Illuminate\Database\Eloquent\Model;
use Notos\Contracts\Kind as KindContract;
class Kind implements KindContract
{
protected $kind;
public function __construct(Model $kind)
{
$this->kind = $kind;
}
public function findByName($name)
{
return $this->kind->firstOrCreate(array('name' => $name));
}
}
Мой ServiceProvider:
namespace Notos\Providers;
use Illuminate\Support\ServiceProvider;
use Notos\Kind;
use Notos\Repository\Kind as KindRepository;
class RepoServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->bind('Notos\Contracts\Kind', function ($app) {
return new KindRepository(new Kind);
});
}
}
И мой контроллер, который использует репозиторий:
namespace Notos\Http\Controllers;
use Notos\Repository\Kind as KindRepository;
class KindController extends Controller
{
protected $kind;
public function __construct(KindRepository $kind)
{
$this->kind = $kind;
}
public function find($name)
{
return $this->kind->findByName($name);
}
}
Этот провайдер зарегистрирован в конфигурации/app.php
Когда я пытаюсь выполнить KindController @ найти я получаю эту ошибку:
BindingResolutionException in Container.php line 785:
Target [Illuminate\Database\Eloquent\Model] is not instantiable.
Я не могу найти то, что я делаю неправильно , Он отлично работает, если я изменю __construct (Model $ kind) на __construct (Kind $ kind).
Любые идеи?
конечно ... очевидно! – BakGat