Шаблон хранилища на Laravel - PullRequest
3 голосов
/ 04 июня 2019

Я хотел бы использовать Repository Pattern, но я застрял в синтаксисе. Я хочу получить индекс своей функции ().

Первый шаг: я создаю папку Repositories и создаю файл AuteurRepository.php

enter image description here

В моем файле AuteurController У меня есть это:

public function index()
{
   $auteurs = Auteur::oldest()->paginate(5);
   return view('admin.auteurs.index', compact('auteurs'))
           ->with('i', (request()->input('page', 1)-1)*5);
}

А в моей модели у меня есть только файл Автор

protected $fillable = ['name', 'firstname'];

У меня есть 2 вопроса:

1) В моем файле AuteurRepository как мне создать мою функцию index () ?

Я пробовал это?

<?php 

namespace App\Repositories; 
use App\Auteur; 

class AuteurRepository
{
    public function index()
    {
        return Auteur::oldest()->paginate(5);
    }
}


?>

Мой второй вопрос в моем AuteurController Я не понимаю, что делать?

У меня есть это сейчас

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Auteur;
use App\Repositories\AuteurRepository; 

class AuteurController extends Controller
{


    protected $auteurs;

    public function __construct(AuteurRepository $auteurs)
    {
        $this->auteurs = $auteurs; 
    }

    public function index(Request $request)
    {

        return view('admin.auteurs.index', compact('auteurs'))
    }
}

1 Ответ

5 голосов
/ 04 июня 2019

1) В моем файле AuteurRepository как мне создать свою функцию Индекс ()

Вы можете дать ему имя, что вы хотите, index (), allRecords (), .... И выполнить запрос, который вам нужен.

Мой второй вопрос в моем AuteurController. Я не понимаю, что делать?

Если ваш репозиторий выглядит так:

class AuteurRepository
{
    public function index()
    {
        return Auteur::oldest()->paginate(5);
    }
}

В вашем контроллере вы можете получить доступ к функции индекса репо следующим образом:

class AuteurController extends Controller
{


    protected $auteurs;

    public function __construct(AuteurRepository $auteurs)
    {
        $this->auteurs = $auteurs; 
    }

    public function index(Request $request)
    {
        $auteurs = $this->auteurs->index();

        return view('admin.auteurs.index', compact('auteurs'))
    }
}

EDIT
Также вы можете немного настроить запрос. Например:

В репозитории примите параметр в индексном методе:

class AuteurRepository
{
    public function index($filters)
    {

        $pagination = $filters['pagination'];
        $order = $filters['order'];

        return Auteur::orderBy('created_at', $order)
                       ->paginate($pagination);
    }
}

И в контроллере создать массив для передачи в качестве параметра:

    $filters = [
        'pagination' => 5,
        'order' => 'asc',
    ];

или

    $filters = [
        'pagination' => 10,
        'order' => 'desc',
    ];

Или вы можете получить значения из запроса (обязательно оставьте значение по умолчанию, если входные данные запроса равны нулю)

    $filters = [
        'pagination' => $request->input('pagination')?: 5,
        'order' => $request->input('order')?: 'asc',
    ];

и затем передать параметр в репо:

    $auteurs = $this->auteurs->index($filters);

Надеюсь, это поможет; -)

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