Контроллер одного действия

Контроллер одного действия

Иногда вам нужен контроллер, без всех ресурсных методов, таких как index(), create(), store() и т.д. Просто контроллер, который делает только одну вещь, и вы изводитесь в попытках, как назвать этот метод. Расслабьтесь — есть метод __invoke().

Вы можете создать контроллер всего лишь с одним методом __invoke():

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class ProfileController extends Controller
{
    /**
     * Показать профиль данного пользователя
     *
     * @param  int  $id
     * @return Response
     */
    public function __invoke($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

Как вы видите, можно даже передать в него параметр.

Чтобы вызвать этот метод просто укажите контроллер в в routes/web.php:

Route::get('user/{id}', 'ProfileController');

Создавать такие контроллеры можно с помощью artisan-команды:

php artisan make:controller ProfileController --invokable

Автор: Povilas Korop
Перевод: Алексей Широков

Наш Телеграм-канал — следите за новостями о Laravel.