Học Laravel 10 cơ bản – Bài 3: Controller & Request Laravel 10

Hướng dẫn Laravel 10: Controller & Request

1. Controller là gì?

  • Controller giúp tách biệt logic xử lý ra khỏi file routes/web.php → code gọn gàng, dễ bảo trì.

  • Thay vì viết logic trong Route::get(), ta đưa vào 1 hàm trong Controller.


2. Tạo Controller

Dùng Artisan để tạo controller:

php artisan make:controller UserController

Laravel sẽ tạo file: app/Http/Controllers/UserController.php

Ví dụ:

namespace App\Http\Controllers; 
use Illuminate\Http\Request; 

class UserController extends Controller 
{ 
    // Action trả về view 
    public function index() { 
           return view('users.index'); 
    } 

    // Action trả về dữ liệu public 
    public function show($id) { 
           return "Chi tiết User có ID = " . $id; 
    } 
}

3. Gắn Controller vào Route

Trong routes/web.php:

use App\Http\Controllers\UserController; 

Route::get('/users', [UserController::class, 'index']); 
Route::get('/users/{id}', [UserController::class, 'show']);

👉 Truy cập:

  • /users → trả về view users.index

  • /users/10Chi tiết User có ID = 10


4. Các loại Controller

🔹 Controller cơ bản

Ví dụ ở trên.

🔹 Resource Controller (RESTful)

Dùng để nhanh chóng tạo CRUD (Create, Read, Update, Delete).

php artisan make:controller PostController --resource

Tự động tạo 7 action trong PostController:

  • index() → danh sách

  • create() → form thêm

  • store() → lưu dữ liệu mới

  • show($id) → xem chi tiết

  • edit($id) → form sửa

  • update($id) → cập nhật

  • destroy($id) → xóa

Khai báo route resource:

Route::resource('posts', PostController::class);

👉 Laravel tự sinh tất cả route CRUD (php artisan route:list để xem).


5. Request trong Laravel

🔹 Lấy dữ liệu từ Request

public function store(Request $request) { 
       // Lấy toàn bộ input 
       $data = $request->all(); 
       // Lấy input theo tên 
       $name = $request->input('name');
       $email = $request->input('email'); 
       // Lấy query string ?page=2 
       $page = $request->query('page', 1); 
       return "Tên: $name - Email: $email - Page: $page"; 
}

Route để test:

Route::post('/users', [UserController::class, 'store']);

Form test (resources/views/users/create.blade.php):

<form action="/users" method="POST"> 
    @csrf 
    <input type="text" name="name" placeholder="Tên"> 
    <input type="email" name="email" placeholder="Email"> 
    <button type="submit">Gửi</button> 
</form>


6. Validate dữ liệu Request

Laravel có sẵn hàm validate trong Controller:

public function store(Request $request) { 
       $validated = $request->validate([ 
             'name' => 'required|string|max:100', 
             'email' => 'required|email|unique:users,email', 
       ]); 
      return "Dữ liệu hợp lệ: " . json_encode($validated); 
}

👉 Nếu lỗi → Laravel tự động redirect về form + hiển thị error messages.

Trong view Blade, hiển thị lỗi:

@if ($errors->any()) 
    <div> 
        <ul> 
            @foreach ($errors->all() as $error)
                 <li>{{ $error }}</li> 
            @endforeach 
        </ul> 
    </div> 
@endif


7. Form Request (Validate chuyên biệt)

Để tách validate ra file riêng, tạo FormRequest:

php artisan make:request StoreUserRequest

File: app/Http/Requests/StoreUserRequest.php

namespace App\Http\Requests; 
use Illuminate\Foundation\Http\FormRequest; 

class StoreUserRequest extends FormRequest { 
           public function rules() { 
                   return [ 
                             'name' => 'required|string|max:100',
                             'email' => 'required|email|unique:users,email',
                          ];
           } 
}

Trong Controller:

use App\Http\Requests\StoreUserRequest; 

public function store(StoreUserRequest $request) { 
          return "OK: " . json_encode($request->validated()); 
}

 



✅ Tổng hợp lại:

Trong bài này, bạn đã học:

  • Tạo Controller & gắn vào Route.

  • Resource Controller để CRUD nhanh chóng.

  • Lấy dữ liệu từ Request (input, query, all).

  • Validate dữ liệu trực tiếp & bằng FormRequest.