Хранилища не должны быть созданы

Я пытаюсь выяснить, почему я получаю эту ошибку. Я следую за собой. Однако единственное отличие состоит в том, что на момент записи это было сделано с Laravel 4.25, и сейчас я использую Laravel 5.0.

Репозитории и Наследование

Исключение BindingResolutionException в строке Container.php 785:

Цель [App \ Repositories \ User \ UserRepository] не может быть создана.

<?php
namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Repositories\User\UserRepository;

use Illuminate\Http\Request;

class UsersController extends Controller {

private $userRepository;

public function __construct(UserRepository $userRepository) {
$this->userRepository = $userRepository;
}

/**
* Display a listing of the resource.
*
* @return Response
*/
public function index() {
$users = $this->userRepository->getAll();

return $users;
}
}

<?php

namespace App\Repositories\User;

use App\Repositories\EloquentRepository;

class EloquentUserRepository extends EloquentRepository implements UserRepository
{
private $model;

function __construct(User $model) {
$this->model = $model;
}
}

<?php

namespace App\Repositories\User;

interface UserRepository {
public function getAll();
}

<?php

namespace App\Repositories;

abstract class EloquentRepository {

public function getAll() {
return $this->model->all();
}

public function getById() {
return $this->model->findOrFail($id);
}
}

1

Решение

Вы тип намекаете на интерфейс, а не на сам класс. Эта ошибка возникает из-за того, что Laravel не может связать интерфейс, поскольку привязка должна быть инстанцируемой. Абстрактные классы или интерфейсы недопустимы, если Laravel не знает конкретный (инстанцируемый) класс для замены абстрактного класса / интерфейса.

Вам нужно будет связать EloquentUserRepository к интерфейсу:

App::bind('UserRepository', 'EloquentUserRepository');
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]