Не могу заставить работать собственный репозиторий Laravel - PullRequest
0 голосов
/ 01 февраля 2019

Я не могу заставить свой репозиторий работать, когда я просто пытаюсь получить весь список документов, он ничего не возвращает

Вот мой DocumentRepository

<?php

namespace App\Repositories\Document;

interface DocumentRepository
{
  public function getall();

  public function getById($id);

  public function create(array $attributes);

  public function update ($id, array $attributes);

  public function delete ($id);

}

Вот функции

<?php


namespace App\Repositories\Document;

class EloquentDocument implements DocumentRepository
{

  private $model;

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


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

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

  public function create(array $attributes)
  {
    return $this->model->create($attributes);
  }

  public function delete($id)
  {
    $this->getById($id)->delete();
    return true;
  }

  public function update($id array $attributes)
  {
    $document = $this->model->findOrFail($id);
    $document->update($attribute);
    return $document;
  }
}

и вот контроллер

<?php
namespace App\Http\Controllers;

use App\Repositories\Document;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class DocumentController extends Controller
{
    /**
     * @var DocumentRepository
     */
    private $document;
    /**
     * TodoController constructor.
     */
    public function __construct(DocumentController $document)
    {
        $this->document = $document;
    }
    public function getalldocuments()
    {
        return $this->document->getAll();
    }
}

Для вашей информации в моей таблице / модели документов есть две строки данных, поэтому я просто хочу получить их обе, просто возвращая, но вв моем случае это просто ничего не возвращает.Вот маршрут

Route::get('/documents', 'DocumentController@getalldocuments');

Вот регистрационная часть, например, в AppServiceProviders.php

 public function register()
    {
        $this->app->singleton(DocumentRepository::class, EloquentDocument::class);
    }

1 Ответ

0 голосов
/ 01 февраля 2019

Вы намекаете на тип DocumentController вместо вашего реального хранилища.

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Repositories\Document\DocumentRepository; 

class DocumentController extends Controller
{
    /**
    * @var DocumentRepository
    */
    private $document;

    public function __construct(DocumentRepository $document)
    {
        $this->document = $document;
    }

    public function getalldocuments()
    {
        return $this->document->getAll();
    }
}

Теперь, при условии, что вы правильно связали интерфейс для разрешения в своем реализованном хранилище документов, это должно работать.

Для получения дополнительной информации о том, как привязать интерфейсы к реализации, прочитайте это: https://laravel.com/docs/5.7/container#binding-interfaces-to-implementations

Редактировать : у вас есть некоторые проблемы с синтаксисом в интерфейсе вашего репозитория.Вам не хватает функция :

<?php

namespace App\Repositories\Document;

interface DocumentRepository
{
  public function getall();

  public function getById($id);

  public function create(array $attributes);

  public function update($id, array $attributes);

  public function delete($id);
}

Редактировать 2: Ваша привязка верна.Однако я заметил, что вы не привязываете свою модель App\Document к реализации правильно.

<?php

namespace App\Repositories\Document;

use App\Document; 

class EloquentDocument implements DocumentRepository
{

    private $model;

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

    //
    //
    //
}

Необходимо добавить правильный оператор использования вверху.Предполагая, что ваша модель документа находится в App\Document, это должно работать.

...