Laravel Controllers

Laravel Controllers

Controllers group related request-handling logic into a single class, keeping your route files clean and organised.

1 - Creating a Controller

php artisan make:controller ArticleController

2 - Basic Controller

namespace App\Http\Controllers;

use App\Models\Article;
use Illuminate\View\View;

class ArticleController extends Controller
{
    public function index(): View
    {
        $articles = Article::latest()->paginate(10);
        return view('articles.index', compact('articles'));
    }

    public function show(Article $article): View
    {
        return view('articles.show', compact('article'));
    }
}

3 - Registering Controller Routes

use App\Http\Controllers\ArticleController;

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

4 - Single-Action Controllers

// Use __invoke for controllers that only handle one action
class ShowDashboard extends Controller
{
    public function __invoke(): View
    {
        return view('dashboard');
    }
}

// Route registration
Route::get('/dashboard', ShowDashboard::class);

Note: Always type-hint your dependencies in controller method parameters. Laravel's service container will automatically inject them.

-Tip-