Типы контроллеров

Контроллеры в Laravel бывают следующих типов:

1. Контроллеры-функции

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

Route::get('/', function () {
    return view('home');
    }); 

С передачей параметров:

Route::get('/{id}', function (App\Models\Article $id) {
    return view('home', ['id' => $id]);
    });

2. Контроллеры одного действия (Single Action Controllers)

Контроллеры-классы, которые выполняют только одно простейшее действие, вызываются с помощью общедоступного метода __invoke().

Вывод такого маршрута происходит следующим образом:

Route::get('no_artikle', PageNoarticleController::class);

То есть, второе значение можно передавать не как массив, а как простое название класса.

Для создания такого контроллера необходимо к команде artisan добавить флаг --invokable

php artisan make:controller Название контроллера --invokable

3. Базовый контроллер

Создается с помощью команды:

php artisan make:controller Название контроллера 

При этом будет создан контроллер с указанным именем в папке app/Http/Controllers.

Внутри контроллера нужно создать метод, например:

class ArticleController extends Controller
{
    
    public function index($id)
    {
        return view('article', [
            'article_id' => Article::findOrFail($id)
        ]);
    }
}

Здесь Article - это название модели, которая отвечает за вывод определенной записи, findOrFail - метод, который находит запись с указанным id, а если такая запись отсутствует - выводит страницу 404.

В маршрутизаторе такой контроллер выводится следующим образом:

Route::get('/article/{$id}', [ArticleController::class, 'index']);