Абстрактный контроллер - PullRequest
2 голосов
/ 13 марта 2019

У меня стандартный контроллер, логика которого аналогична другим контроллерам.Это контроллеры панели администратора.

<?php

namespace App\Http\Controllers;

use App\Http\Requests\PageRequest;
use App\Page;
use App\Repositories\PageRepository;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;

class PageController extends Controller
{
    private const REDIRECT_INDEX = 'PageController@index';
    protected $model;

    public function __construct()
    {
        $this->model = new PageRepository(new Page());
    }

    public function index(): View
    {
        $pages = $this->model->all();

        return view('pages.index', compact('pages'));
    }

    public function create(): View
    {
        return view('pages.create');
    }

    public function store(PageRequest $request): RedirectResponse
    {
        (new Page($request->all()))->save();

        return redirect()->action(self::REDIRECT_INDEX)->with('status', 'Created');
    }

    public function show(Page $page): View
    {
        return view('pages.show', compact('page'));
    }

    public function edit(Page $page): View
    {
        return view('pages.edit', compact('page'));
    }

    public function update(PageRequest $request, Page $page)
    {
        $page->fill($request->all())->save();

        return redirect()->action(self::REDIRECT_INDEX)->with('status', 'Updated');
    }

    public function destroy(Page $page): RedirectResponse
    {
        $page->delete();

        return redirect()->action(self::REDIRECT_INDEX)->with('status', 'Deleted');
    }
}

В других контроллерах различаются только

  • const REDIRECT_INDEX
  • $ model
  • vies - 'страниц.index ',' pages.create 'и т. д.
  • PageRequest $ request - запрос с проверкой
  • Page $ page - автоматически найденная строка из db по slug

Так что у меня есть PageController, NewsController, TabController, TypeController с той же логикой.Как я могу абстрагироваться?

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