Poznajemy tzw. single action controller w Laravelu. Kontynuacja poprzednich tutoriali. Lekcja krótka, ale ciekawa. Do dzieła.

Poprzednio napisaliśmy sobie taki widok:

@extends('layouts.app')

@section('title', 'Faker Example')
@section('content')

 <h1>Faker example</h1>
    @foreach (range(1, 5) as $index)
    <div>
        <p>Fake male fullname: {{ fake()->name('male') }}</p>
        <p>Fake female fullname: {{ fake()->name('female') }}</p>
        <p>Fake first name: {{ fake()->firstName()}}</p>
        <p>Fake last name: {{ fake()->lastName()}}</p>
    </div>
    @endforeach
  
@endsection

Mamy też obsługujący go route:

Route::get('/faker', function () {
    return view('faker');
})->name("faker");

Ok, wykonajmy taką komendę:

php artisan make:controller FakerController --invokable

Teraz ustawiamy nasz kontroler:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class FakerController extends Controller
{
    /**
     * Handle the incoming request.
     */
    public function __invoke(Request $request)
    {
        return view('faker');
    }
}

Teraz w web.php robimy import oraz używamy kontrolera:

use App\Http\Controllers\FakerController;

//(...)

Route::get('/faker', function () {
    return view('faker');
})->name("faker");


Route::get('/faker2', FakerController::class)->name("faker2");

Jak widać trudne to nie jest. Invoke to metoda magiczna klas PHP, którą już omawialiśmy. Taki kontroler nadaje się do pojedynczych akcji, to akurat najlepszy przykład nie jest serwowanie view, mamy lepsze sposoby, ale generalnie tak to działa.