7. Контроллер управления категориями

05 Июня 2020 01:18 (Редактировано: 05 Июня 2020 02:35)

Важно отметить один момент: всегда нужно писать сначала контроллеры, потом маршруты.

Обновим файл маршрутов web.php, приведем его к следующему виду:

<?php

//use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');

Route::group(['namespace' => 'Blog', 'prefix' => 'blog'], function() {
    Route::resource('posts', 'PostController')->names('blog.posts');
});

//Админка блога
$groupData = [
    'namespace' => 'Blog\Admin',
    'prefix' => 'admin/blog',
];
Route::group($groupData, function(){
    //BlogCategory
    $methods = ['index', 'edit', 'update', 'create', 'store'];
    Route::resource('categories', 'CategoryController')
        ->only($methods)
        ->names('blog.admin.categories');
});



//Route::resource('rest', 'RestTestController')->names('restTest');

Примечание. В данном примере создание маршрутов рассматривается в ознакомительных целях. Это рабочий вариант, но не совсем корректный.

Смотрим список маршрутов по уже известной команде в терминале:

php artisan route:list

Мы получим ошибку т.к. контроллер CategoryController не создан. Создаем его в директории admin:

php artisan make:controller Blog/Admin/CategoryController --resource

Далее смотрим опять маршруты - все в порядке!

Примечание. Для удобства, можно сохранять маршруты в файл php artisan route:list > routes.txt

Базовый контроллер для админки

Создаем в директории Http/controllers/Blog/Admin файл BaseController.php и добавляем следующее содержимое:

<?php

namespace App\Http\Controllers\Blog\Admin;

use App\Http\Controllers\Blog\BaseController as GuestBaseController;

abstract class BaseController extends GuestBaseController
{

}

Это будет абстрактный класс для всех дальнейших контроллеров админки.

Доабвляем в файл CategoryController.php в метод, например, edit строку с dd(__METHOD__); и пробуем зайти в проект по адресу project.loc/admin/blog/categories/1/edit