
lOMoARcPSD| 58702377
Chương 6: Lập Trình Web với Laravel
6.1 Cài đặt và cấu hình
6.1.1 Cài đặt Laravel
Laravel là một framework PHP mạnh mẽ và phổ biến để phát triển các ứng dụng web. Để
bắt đầu với Laravel, việc cài đặt đúng cách là rất quan trọng.
1. Kiểm tra yêu cầu hệ thống
Trước khi cài đặt Laravel, đảm bảo rằng máy tính đáp ứng các yêu cầu hệ thống sau:
- PHP >= 8.0
- OpenSSL PHP Extension
- PDO PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
- Composer (trình quản lý phụ thuộc cho PHP)
2. Cài đặt Composer
Composer là một công cụ quản lý thư viện PHP, giúp dễ dàng cài đặt và quản lý các phụ
thuộc cần thiết cho Laravel. Nếu chưa cài đặt Composer, có thể tải về và cài đặt từ
Composer's official website.
3. Tạo một dự án Laravel mới
Sau khi cài đặt Composer, có thể tạo một dự án Laravel mới bằng cách sử dụng lệnh sau:
composer create-project --prefer-dist laravel/laravel tên_dự_án
Ví dụ, để tạo một dự án có tên "my-laravel-app":
composer create-project --prefer-dist laravel/laravel my-laravel-app
Lệnh này sẽ tải xuống và cài đặt phiên bản mới nhất của Laravel cùng với tất cả các phụ
thuộc cần thiết.
4. Cấu hình môi trường
Sau khi cài đặt Laravel, di chuyển vào thư mục dự án vừa tạo:
cd my-laravel-app

lOMoARcPSD| 58702377
Laravel cung cấp tệp .env.example với các cấu hình mặc định. Sao chép tệp này và đặt
tên là .env:
cp .env.example .env
Sau đó, mở tệp .env và cập nhật các cấu hình cần thiết như thiết lập cơ sở dữ liệu, thông
tin ứng dụng, và các thông số khác.
5. Tạo khóa ứng dụng
Để đảm bảo tính bảo mật của ứng dụng Laravel, cần tạo khóa ứng dụng bằng lệnh sau:
php artisan key
Lệnh này sẽ tạo và đặt khóa ứng dụng vào tệp .env.
6. Khởi động máy chủ phát triển
Sau khi hoàn tất các bước trên, có thể khởi động máy chủ phát triển(môi trường develop) để
kiểm tra ứng dụng Laravel của mình:
php artisan serve
Máy chủ sẽ chạy tại địa chỉ http://localhost:8000. Mở trình duyệt và truy cập vào địa chỉ này
để xem ứng dụng Laravel vừa cài đặt.
6.1.2 Cấu hình
Sau khi cài đặt Laravel, việc cấu hình ứng dụng là bước tiếp theo quan trọng để đảm bảo
rằng môi trường phát triển và sản xuất hoạt động một cách mượt mà.
1. Thiết lập tệp .env
Tệp .env là nơi chứa các thông số cấu hình quan trọng cho ứng dụng Laravel. Đây là tệp
bảo mật không được chia sẻ công khai và thường được sử dụng để cấu hình các thông số
theo từng môi trường (phát triển, sản xuất).
● APP_NAME: Đặt tên cho ứng dụng. Ví dụ, APP_NAME="My Laravel App"
● APP_ENV: Định nghĩa môi trường của ứng dụng, thường là local, production,
staging. Ví dụ, APP_ENV=local
● APP_DEBUG: Kích hoạt chế độ debug. Khi bật, lỗi sẽ hiển thị chi tiết, chỉ nên sử dụng
trong môi trường phát triển. Ví dụ, APP_DEBUG=true
● APP_URL: Đặt URL gốc cho ứng dụng. Ví dụ, APP_URL=http://localhost

lOMoARcPSD| 58702377
2. Cấu hình cơ sở dữ liệu
Laravel hỗ trợ nhiều loại cơ sở dữ liệu như MySQL, PostgreSQL, SQLite, SQL Server. Các
thông số cơ bản cần cấu hình trong tệp .env bao gồm:
● DB_CONNECTION: Loại kết nối cơ sở dữ liệu (ví dụ, mysql, pgsql)
● DB_HOST: Địa chỉ máy chủ cơ sở dữ liệu. Ví dụ, DB_HOST=127.0.0.1
● DB_PORT: Cổng kết nối đến cơ sở dữ liệu. Ví dụ, DB_PORT=3306
● DB_DATABASE: Tên cơ sở dữ liệu. Ví dụ, DB_DATABASE=my_database
● DB_USERNAME: Tên người dùng của cơ sở dữ liệu. Ví dụ, DB_USERNAME=root
● DB_PASSWORD: Mật khẩu cơ sở dữ liệu. Ví dụ, DB_PASSWORD=password
3. Cấu hình cache và session
Laravel sử dụng các hệ thống cache và session để tối ưu hóa hiệu suất và quản lý phiên
làm việc. Có thể cấu hình loại driver sử dụng trong tệp .env:
● CACHE_DRIVER: Loại driver cho cache (ví dụ, file, redis, memcached). Ví dụ,
CACHE_DRIVER=file
● SESSION_DRIVER: Loại driver cho session (ví dụ, file, database, redis). Ví dụ,
SESSION_DRIVER=file
● SESSION_LIFETIME: Thời gian tồn tại của session (tính bằng phút). Ví dụ,
SESSION_LIFETIME=120
4. Cấu hình mail
Laravel hỗ trợ gửi email thông qua nhiều dịch vụ như SMTP, Mailgun, Amazon SES. Cấu
hình thông số mail trong tệp .env:
● MAIL_MAILER: Loại mailer sử dụng (ví dụ, smtp, mailgun, ses). Ví dụ,
MAIL_MAILER=smtp
● MAIL_HOST: Địa chỉ máy chủ SMTP. Ví dụ, MAIL_HOST=smtp.mailtrap.io
● MAIL_PORT: Cổng kết nối SMTP. Ví dụ, MAIL_PORT=2525
● MAIL_USERNAME: Tên người dùng SMTP. Ví dụ, MAIL_USERNAME=null
● MAIL_PASSWORD: Mật khẩu SMTP. Ví dụ, MAIL_PASSWORD=null
● MAIL_ENCRYPTION: Phương thức mã hóa (ví dụ, tls, ssl). Ví dụ,
MAIL_ENCRYPTION=tls
● MAIL_FROM_ADDRESS: Địa chỉ email gửi đi. Ví dụ,
MAIL_FROM_ADDRESS=hello@example.com
● MAIL_FROM_NAME: Tên người gửi. Ví dụ, MAIL_FROM_NAME="${APP_NAME}"
5. Cấu hình khác
Laravel còn cung cấp nhiều cấu hình khác trong thư mục config:
● config/app.php: Cấu hình chung của ứng dụng (múi giờ, ngôn ngữ, khóa ứng
dụng).
● config/auth.php: Cấu hình xác thực người dùng.
● config/database.php: Cấu hình database.

lOMoARcPSD| 58702377
● config/filesystems.php: Cấu hình hệ thống tệp (local, s3).
● config/queue.php: Cấu hình hệ thống hàng đợi.
Việc tùy chỉnh các cấu hình này giúp ứng dụng Laravel hoạt động đúng theo yêu cầu và điều
kiện của từng môi trường.
6.1.3 Cấu trúc thư mục
1. Thư mục app/
Chứa mã nguồn chính của ứng dụng, bao gồm:
- Console: Chứa các lệnh Artisan tùy chỉnh.
- Exceptions: Quản lý các ngoại lệ và lỗi.
- Http: Chứa các Controllers, Middleware, và Requests của ứng dụng.
- Models: Chứa các mô hình (models) của ứng dụng.
- Providers: Chứa các lớp cung cấp dịch vụ (Service Providers).
2. Thư mục bootstrap/
- Chứa tệp app.php để khởi tạo ứng dụng.
- Cache: Chứa các tệp bộ nhớ cache được tạo trong quá trình khởi động ứng dụng. 3.
Thư mục config/
Chứa tất cả các tệp cấu hình của ứng dụng, như cấu hình ứng dụng, cơ sở dữ liệu, mail,
dịch vụ bên thứ ba,...
4. Thư mục database/
Quản lý các thành phần liên quan đến cơ sở dữ liệu.
- Migrations: Chứa các tệp migration để quản lý cấu trúc cơ sở dữ liệu.
- Factories: Chứa các tệp định nghĩa factory cho việc tạo dữ liệu mẫu.
- Seeders: Chứa các tệp seeder để tạo dữ liệu ban đầu cho cơ sở dữ liệu.
5. Thư mục public/
Chứa các tệp có thể truy cập công khai như tệp index.php (điểm vào của ứng dụng), tệp tin
tĩnh (CSS, JS, hình ảnh).
6. Thư mục resources/
Chứa các tài nguyên không biên dịch của ứng dụng.
- Views: Chứa các tệp Blade templates để tạo giao diện người dùng.
- Lang: Chứa các tệp dịch đa ngôn ngữ của ứng dụng.
- CSS/JS: Chứa các tệp tài nguyên front-end như CSS và JavaScript trước khi biên
dịch.

lOMoARcPSD| 58702377
7. Thư mục routes/
Chứa các tệp định nghĩa đường dẫn (routes) của ứng dụng.
- web.php: Định nghĩa các route dành cho giao diện web.
- api.php: Định nghĩa các route dành cho API.
- console.php: Định nghĩa các route dành cho các lệnh Artisan.
- channels.php: Định nghĩa các kênh sự kiện broadcast.
8. Thư mục storage/
Chứa các thư mục, tệp được lưu trữ trong quá trình chạy ứng dụng.
- app: Chứa các tệp do ứng dụng tạo ra.
- logs: Chứa các tệp nhật ký (log) của ứng dụng.
- framework: Chứa các tệp bộ nhớ cache, session, và view đã biên dịch.
9. Thư mục tests/
Chứa các tệp kiểm thử (test) của ứng dụng, bao gồm kiểm thử đơn vị và kiểm thử chức
năng.
10. Thư mục vendor/
Chứa các thư viện bên thứ ba được cài đặt qua Composer. Đây là nơi lưu trữ tất cả các phụ
thuộc của ứng dụng.
11. Tệp .env
Chứa các biến môi trường cụ thể cho môi trường hiện tại (như local, production). Được sử
dụng để cấu hình ứng dụng mà không cần thay đổi mã nguồn.
12. Tệp composer.json
Chứa thông tin về các phụ thuộc của dự án và các cấu hình liên quan đến Composer. Tệp
này giúp quản lý các gói phần mềm mà dự án cần và cấu hình tự động tải các lớp PHP. 13.
Tệp artisan
Tệp dòng lệnh của Laravel, cung cấp nhiều lệnh hữu ích cho quá trình phát triển.
6.2 Kiến trúc MVC trong Laravel
6.2.1 Tổng quan về kiến trúc MVC
Laravel sử dụng kiến trúc MVC (Model-View-Controller) để tổ chức mã nguồn một cách có
cấu trúc và dễ quản lý. Kiến trúc MVC giúp tách biệt các thành phần trong ứng dụng, làm
cho việc phát triển, bảo trì, và mở rộng ứng dụng trở nên hiệu quả hơn.

lOMoARcPSD| 58702377
1. Model (Mô hình)
Model là nơi xử lý các logic liên quan đến dữ liệu của ứng dụng. Nó tương tác trực tiếp với
cơ sở dữ liệu và chứa các phương thức để truy xuất, lưu trữ, và thao tác dữ liệu.
Vị trí
Các model trong Laravel thường được đặt trong thư mục app/Models.
Ví dụ
Một model User có thể chứa các thuộc tính và phương thức để xử lý thông tin người dùng.
2. View (Giao diện)
View là thành phần hiển thị dữ liệu cho người dùng. Nó chịu trách nhiệm tạo ra giao diện
người dùng (UI) và nhận dữ liệu từ Controller để hiển thị. Vị trí
Các tệp View trong Laravel được đặt trong thư mục resources/views.
Ví dụ
Một tệp View có thể là một tệp Blade template (ví dụ, home.blade.php) để hiển thị trang chủ
của ứng dụng.
3. Controller (Điều khiển)
Controller đóng vai trò trung gian giữa Model và View. Controller nhận các yêu cầu từ người
dùng, gọi các phương thức của Model để lấy dữ liệu, và sau đó chuyển dữ liệu đó tới View
để hiển thị. Vị trí
Các Controller trong Laravel thường được đặt trong thư mục app/Hp/Controllers.
Ví dụ
Một Controller có thể có một phương thức để xử lý yêu cầu hiển thị danh sách người dùng
từ cơ sở dữ liệu và gửi dữ liệu đó đến một View tương ứng.
4. Lợi ích của kiến trúc MVC
Tách biệt các phần
MVC giúp tách biệt logic nghiệp vụ (Model), giao diện người dùng (View), và điều hướng
ứng dụng (Controller), làm cho mã nguồn dễ quản lý và bảo trì.
Tái sử dụng mã nguồn
Do sự tách biệt rõ ràng giữa các phần, các thành phần có thể được tái sử dụng dễ dàng
trong các phần khác của ứng dụng.

lOMoARcPSD| 58702377
Dễ dàng mở rộng
MVC cho phép mở rộng từng phần của ứng dụng mà không ảnh hưởng đến các phần khác,
giúp việc phát triển tính năng mới trở nên đơn giản hơn.
Dễ dàng bảo trì
Do các phần được tách biệt, việc bảo trì ứng dụng trở nên dễ dàng hơn, bởi vì thay đổi
trong một phần sẽ ít ảnh hưởng đến các phần khác.
Hỗ trợ làm việc nhóm
MVC hỗ trợ các nhóm phát triển làm việc song song trên các thành phần khác nhau của ứng
dụng mà không gây xung đột.
5. Luồng hoạt động trong MVC
➔
Người dùng gửi một yêu cầu (request) từ trình duyệt đến ứng dụng Laravel.
➔
Yêu cầu được xử lý bởi một Route và chuyển tiếp tới Controller tương ứng.
➔
Controller gọi các phương thức của Model để lấy dữ liệu từ cơ sở dữ liệu hoặc thực
hiện các thao tác khác.
➔
Dữ liệu được trả về từ Model và chuyển đến View.
➔
View hiển thị dữ liệu dưới dạng HTML và gửi phản hồi (response) về cho người
dùng.
6.2.2 Mô hình (Model)
Mô hình (Model) trong Laravel đóng vai trò trung tâm trong việc quản lý dữ liệu của ứng
dụng. Nó tương tác trực tiếp với cơ sở dữ liệu và chứa các logic liên quan đến việc truy
xuất, lưu trữ và thao tác dữ liệu. Dưới đây là cách tạo và làm việc với mô hình trong Laravel.
1. Tạo mô hình
Laravel cung cấp lệnh Artisan để tạo mô hình một cách nhanh chóng. Để tạo một mô hình
mới, sử dụng lệnh sau:
php artisan make:model TênModel
Ví dụ: Để tạo mô hình Product, chạy lệnh:
php artisan make:model Product
Lệnh này sẽ tạo ra một tệp mô hình mới trong thư mục app/Models.
2. Kết nối mô hình với cơ sở dữ liệu
Mỗi mô hình trong Laravel đại diện cho một bảng trong cơ sở dữ liệu. Theo mặc định,
Laravel sẽ sử dụng tên số nhiều của mô hình để tìm bảng tương ứng. Ví dụ, mô hình
Product sẽ được ánh xạ tới bảng products.

lOMoARcPSD| 58702377
Tùy chỉnh tên bảng
Nếu bảng trong cơ sở dữ liệu có tên khác, có thể tùy chỉnh bằng cách thêm thuộc tính
$table trong mô hình:
<?php protected $table = 'tên_bảng';
3. Làm việc với Eloquent ORM
Laravel sử dụng Eloquent ORM để tương tác với cơ sở dữ liệu thông qua mô hình. Eloquent
cung cấp các phương thức mạnh mẽ để truy xuất và thao tác dữ liệu mà không cần viết câu
lệnh SQL trực tiếp.
Truy xuất dữ liệu:
<?php
$products = Product::all();
Thêm bản ghi mới:
<?php
$product = new Product;
$product->name = 'Product Name';
$product->price = 100;
$product->save();
Cập nhật bản ghi:
<?php
$product = Product::find(1);
$product->price = 150;
$product->save();

lOMoARcPSD| 58702377
Xóa bản ghi:
<?php
$product = Product::find(1);
$product->delete();
4. Định nghĩa quan hệ giữa các mô hình
Eloquent cho phép định nghĩa mối quan hệ giữa các mô hình, giúp quản lý dữ liệu phức tạp
hơn. Các mối quan hệ phổ biến bao gồm:
One to One (Quan hệ một - một)
Một quan hệ một - một xảy ra khi một bản ghi trong bảng này chỉ liên kết với một bản ghi
duy nhất trong bảng khác. Ví dụ, một người dùng chỉ có một địa chỉ và ngược lại.
Ví dụ về định nghĩa quan hệ một - một trong mô hình User:
<?php public function address() { return $this-
>hasOne(Address::class);
}
Trong ví dụ này, phương thức address() định nghĩa rằng mô hình User có một quan hệ
một - một với mô hình Address. Khi gọi $user->address, Eloquent sẽ tự động truy xuất
địa chỉ liên quan đến người dùng đó.
One to Many (Quan hệ một - nhiều)
Một quan hệ một - nhiều xảy ra khi một bản ghi trong bảng này liên kết với nhiều bản ghi
trong bảng khác. Ví dụ, một bài viết có thể có nhiều bình luận.
Ví dụ về định nghĩa quan hệ một - nhiều trong mô hình Post:
<?php public function comments() { return $this-
>hasMany(Comment::class);
}
Trong ví dụ này, phương thức comments() định nghĩa rằng mô hình Post có một quan hệ
một - nhiều với mô hình Comment. Khi gọi $post->comments, Eloquent sẽ tự động truy
xuất tất cả các bình luận liên quan đến bài viết đó.

lOMoARcPSD| 58702377
Many to Many (Quan hệ nhiều - nhiều)
Một quan hệ nhiều - nhiều xảy ra khi một bản ghi trong bảng này liên kết với nhiều bản ghi
trong bảng khác và ngược lại. Ví dụ, một vai trò có thể thuộc về nhiều người dùng, và một
người dùng có thể có nhiều vai trò.
Ví dụ về định nghĩa quan hệ nhiều - nhiều trong mô hình User:
<?php public function roles() { return $this-
>belongsToMany(Role::class);
}
Trong ví dụ này, phương thức roles() định nghĩa rằng mô hình User có một quan hệ nhiều
- nhiều với mô hình Role. Khi gọi $user->roles, Eloquent sẽ tự động truy xuất tất cả các
vai trò liên quan đến người dùng đó.
5. Sử dụng mutators và accessors
Laravel cung cấp các mutators và accessors để biến đổi giá trị trước khi lưu vào cơ sở
dữ liệu hoặc sau khi truy xuất.
Mutator
Mutator được sử dụng để tự động thay đổi giá trị của thuộc tính trước khi lưu vào cơ sở dữ
liệu. Ví dụ, giả sử cần mã hóa mật khẩu của người dùng trước khi lưu vào cơ sở dữ liệu:
<?php public function
setPasswordAttribute($value) {
$this->attributes['password'] = bcrypt($value);
}
Trong ví dụ này, khi gán giá trị cho thuộc tính password, hàm bcrypt sẽ tự động mã hóa
mật khẩu trước khi lưu vào cơ sở dữ liệu.
Accessor
Accessor được sử dụng để thay đổi giá trị của thuộc tính sau khi truy xuất từ cơ sở dữ liệu.
Ví dụ, giả sử muốn kết hợp tên và họ của người dùng thành một thuộc tính full_name:
<?php public function getFullNameAttribute() { return $this-
>first_name . ' ' . $this->last_name;

lOMoARcPSD| 58702377
}
Trong ví dụ này, khi truy cập thuộc tính full_name, Eloquent sẽ tự động kết hợp
first_name và last_name để trả về tên đầy đủ của người dùng.
6.2.3 Giao diện (View)
Trong Laravel, View (Giao diện) là thành phần chịu trách nhiệm hiển thị dữ liệu cho người
dùng. View nhận dữ liệu từ Controller và hiển thị nó dưới dạng HTML, giúp tạo ra giao diện
người dùng (UI) cho ứng dụng.
1. Tạo View
Laravel sử dụng Blade, một công cụ template mạnh mẽ, để xây dựng các View. Blade cho
phép viết mã PHP trực tiếp trong các tệp HTML, giúp việc tạo giao diện trở nên linh hoạt và
dễ dàng.
➔ Các tệp Blade template được lưu trữ trong thư mục resources/views.
➔ Để tạo một View mới, chỉ cần tạo một tệp với phần mở rộng .blade.php trong thư
mục này.
Ví dụ, để tạo một View cho trang chủ, tạo tệp home.blade.php.
<?php
<!-- resources/views/home.blade.php --> <h1>Welcome to My Laravel
Application</h1>
<p>This is the homepage.</p>
2. Truyền dữ liệu vào View
Dữ liệu có thể được truyền từ Controller đến View bằng cách sử dụng phương thức with
hoặc bằng cách trả về View với một mảng dữ liệu.
Truyền dữ liệu bằng phương thức with
<?php public function show() { $name =
'John Doe'; return view('home')-
>with('name', $name); }

lOMoARcPSD| 58702377
Truyền dữ liệu bằng cách trả về mảng:
<?php public function show() { $name =
'John Doe'; return view('home', ['name'
=> $name]); }
Trong Blade template, dữ liệu này có thể được truy cập và hiển thị bằng cú pháp Blade:
<?php
<p>Welcome, {{ $name }}</p>
3. Kế thừa và mở rộng layout
Blade hỗ trợ việc kế thừa layout, giúp tái sử dụng mã HTML chung cho nhiều View. Một
layout cơ bản có thể được định nghĩa như sau:
<?php

lOMoARcPSD| 58702377
<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head> <title>My Application -
@yield('title')</title>
</head>
<body>
<header>@include('partials.header')</header>
<div class="container">
@yield('content')
</div>
<footer>@include('partials.footer')</footer>
</body>
</html>
Các View khác có thể kế thừa layout này và định nghĩa nội dung riêng biệt:
<?php <!--
resources/views/home.blade.php -->
@extends('layouts.app')
@section('title', 'Home')
@section('content') <h1>Welcome to My
Laravel Application</h1> <p>This is the
homepage.</p>
@endsection
4. Sử dụng các phần tử Blade
Blade cung cấp nhiều phần tử hữu ích để xử lý logic trong View mà không cần viết mã PHP
thuần.
Câu lệnh điều kiện
<?php
@if ($user->isAdmin()) <p>Welcome, Admin!</p>

lOMoARcPSD| 58702377
@else <p>Welcome, User!</p>
@endif
Vòng lặp
<?php
@foreach ($users as $user) <p>{{ $user->name }}</p>
@endforeach
Chèn các tệp View khác
<?php
@include('partials.header')
5. Hiển thị dữ liệu an toàn
Blade tự động escape các biến được hiển thị để ngăn chặn các lỗ hổng XSS. Để hiển thị dữ
liệu không bị escape, sử dụng cú pháp sau:
<?php
{!! $unescapedData !!}
6.2.4 Điều khiển (Controller)
Controller trong Laravel đóng vai trò trung gian giữa Model và View. Controller nhận các yêu
cầu từ người dùng, xử lý logic nghiệp vụ thông qua Model, và cuối cùng trả về kết quả cho
View để hiển thị. Controllers giúp tổ chức mã nguồn một cách rõ ràng và dễ quản lý, tách
biệt logic xử lý khỏi giao diện người dùng.
1. Tạo Controller
Laravel cung cấp lệnh Artisan để tạo một Controller mới một cách nhanh chóng:
php artisan make:controller TênController
Ví dụ: Để tạo một Controller có tên là ProductController, chạy lệnh sau:

lOMoARcPSD| 58702377
php artisan make:controller ProductController
Lệnh này sẽ tạo ra một tệp Controller mới trong thư mục app/Http/Controllers.
2. Cấu trúc cơ bản của một Controller
Một Controller trong Laravel thường chứa các phương thức để xử lý các yêu cầu HTTP và
trả về phản hồi. Dưới đây là ví dụ về cấu trúc cơ bản của một Controller:
<?php namespace
App\Http\Controllers; use
Illuminate\Http\Request;
class ProductController extends Controller
{
public function index()
{
// Trả về danh sách sản phẩm return
view('products.index'); }
public function show($id)
{
// Hiển thị thông n chi ết của sản phẩm với ID cụ thể
return view('products.show',
compact('id')); } public function create()

lOMoARcPSD| 58702377
{
// Hiển thị form tạo sản phẩm mới return
view('products.create'); }
public function store(Request $request)
{
// Lưu sản phẩm mới vào cơ sở dữ liệu
}
public function edit($id)
{
// Hiển thị form chỉnh sửa sản phẩm với ID cụ thể return
view('products.edit', compact('id')); }
public function update(Request $request, $id)
{
// Cập nhật thông n sản phẩm trong cơ sở dữ liệu
}
public function destroy($id)
{
// Xóa sản phẩm khỏi cơ sở dữ liệu
}
}
3. Xử lý các yêu cầu HTTP
Controllers được sử dụng để xử lý các loại yêu cầu HTTP khác nhau như GET, POST, PUT,
DELETE. Mỗi loại yêu cầu sẽ được xử lý bởi một phương thức khác nhau trong Controller:
➔ GET: Thường được sử dụng để lấy dữ liệu hoặc hiển thị thông tin.
➔ POST: Thường được sử dụng để gửi dữ liệu mới tới máy chủ, như tạo một bản ghi
mới.
➔ PUT/PATCH: Được sử dụng để cập nhật dữ liệu hiện có.
➔ DELETE: Được sử dụng để xóa dữ liệu.
4. Sử dụng Request và Response
Laravel cung cấp lớp Request để truy cập dữ liệu từ các yêu cầu HTTP, chẳng hạn như dữ
liệu form hoặc tham số URL. Lớp Response được sử dụng để trả về kết quả cho người
dùng:
<?php
public function store(Request $request)
{
$data = $request->all(); // Lấy tất cả dữ liệu từ request
// Xử lý và lưu dữ liệu
return response()->json(['message' => 'Product created

lOMoARcPSD| 58702377
successfully']);
}
5. Middleware trong Controllers
Middleware là lớp trung gian dùng để xử lý các yêu cầu HTTP trước khi chúng đến
Controller. Middleware có thể được áp dụng cho từng phương thức hoặc cho toàn bộ
Controller:
Áp dụng middleware cho toàn bộ Controller
<?php
public function __construct()
{
$this->middleware('auth'); }
Áp dụng middleware cho từng phương thức
<?php
public function __construct()
{
$this->middleware('auth')->only('store', 'update', 'destroy'); }
6.3 Routing, Middleware, Controllers
6.3.1 Routes
Trong Laravel, Routes (Định tuyến) đóng vai trò quan trọng trong việc xác định cách ứng
dụng phản hồi các yêu cầu từ người dùng. Routes định nghĩa các đường dẫn URL và ánh
xạ chúng tới các phương thức trong Controller hoặc xử lý trực tiếp trong route.
1. Cấu hình Routes
Các route trong Laravel được định nghĩa trong các tệp nằm trong thư mục routes. Laravel
cung cấp bốn tệp route chính:
➔ web.php: Định nghĩa các route cho giao diện web. Các route này thường sử dụng
session và CSRF protection.
➔ api.php: Định nghĩa các route dành cho API. Các route này thường không sử dụng
session và được prefix bằng api/.

lOMoARcPSD| 58702377
➔ console.php: Định nghĩa các route dành cho các lệnh Artisan trong môi trường
console.
➔ channels.php: Định nghĩa các kênh sự kiện broadcast.
2. Định nghĩa một Route đơn giản
Để định nghĩa một route trong Laravel, có thể sử dụng phương thức Route::get,
Route::post, Route::put, Route::delete, tùy thuộc vào phương thức HTTP mà
route sẽ xử lý.
Ví dụ về một route cơ bản xử lý yêu cầu GET
<?php
Route::get('/home', function () { return
view('home'); });
Trong ví dụ này, khi người dùng truy cập đường dẫn /home, Laravel sẽ trả về view home.
3. Route đến Controller
Thay vì xử lý logic trong route closure, hãy sử dụng Controller để tổ chức mã nguồn tốt hơn.
Ví dụ
<?php
Route::get('/products', [ProductController::class, 'index']);
Trong ví dụ này, khi truy cập đường dẫn /products, phương thức index trong
ProductController sẽ được gọi để xử lý yêu cầu.
4. Route với tham số
Laravel cho phép định nghĩa các route có tham số để xử lý các yêu cầu động. Tham số có
thể là bắt buộc hoặc tùy chọn.
Route với tham số bắt buộc
<?php
Route::get('/user/{id}', function ($id) { return
"User ID: " . $id; });
Route với tham số tùy chọn
<?php

lOMoARcPSD| 58702377
Route::get('/user/{name?}', function ($name = 'Guest') {
return "User Name: " . $name; });
Trong các ví dụ này, {id} và {name} là các tham số được truyền vào route, và có thể được
sử dụng trong hàm xử lý.
5. Đặt tên cho Route
Để dễ dàng quản lý và tạo liên kết, có thể đặt tên cho các route. Tên route được định nghĩa
bằng phương thức name.
Ví dụ:
<?php
Route::get('/profile', [UserController::class, 'show'])-
>name('profile.show');
Sau đó, có thể sử dụng tên này để tạo URL:
$url = route('profile.show');
6. Route nhóm và Middleware
Có thể nhóm các route lại với nhau và áp dụng các cấu hình hoặc middleware chung.
<?php
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', function () {
// Chỉ người dùng đã đăng nhập mới có thể truy cập
});
Route::get('/account', function () {
// Chỉ người dùng đã đăng nhập mới có thể truy cập
});
});
Trong ví dụ này, cả hai route /dashboard và /account đều yêu cầu người dùng phải
đăng nhập (auth middleware).
6.3.2 Middleware
Middleware trong Laravel là các lớp trung gian dùng để xử lý các yêu cầu HTTP trước khi
chúng đến Controller hoặc sau khi Controller xử lý xong. Middleware cho phép thực hiện các
nhiệm vụ chung như xác thực, kiểm tra quyền truy cập, ghi nhật ký, và xử lý CORS.
1. Middleware hoạt động như thế nào?

lOMoARcPSD| 58702377
Khi một yêu cầu HTTP đến ứng dụng Laravel, nó sẽ đi qua một chuỗi middleware trước khi
đến Controller xử lý. Mỗi middleware có thể thực hiện các hành động trên yêu cầu, như xác
thực người dùng, và sau đó quyết định cho phép yêu cầu tiếp tục đến Controller hoặc dừng
lại với một phản hồi.
2. Các middleware mặc định trong Laravel
Laravel đi kèm với một số middleware mặc định được định nghĩa trong thư mục
app/Http/Middleware:
● Authenticate: Xác thực người dùng.
● CheckForMaintenanceMode: Kiểm tra xem ứng dụng có đang ở chế độ bảo trì
không.
● EncryptCookies: Mã hóa các cookie trong ứng dụng.
● VerifyCsrfToken: Bảo vệ ứng dụng khỏi các cuộc tấn công CSRF (Cross-Site
Request Forgery).
3. Tạo middleware mới
Để tạo một middleware mới.
Cú pháp:
php artisan make:middleware TênMiddleware
Ví dụ, để tạo một middleware kiểm tra xem người dùng có phải là admin hay không, có thể
chạy lệnh sau:
php artisan make:middleware CheckAdmin
Lệnh này sẽ tạo ra một lớp middleware mới trong thư mục app/Http/Middleware.
4. Sử dụng middleware
Sau khi tạo middleware, cần đăng ký nó trong app/Http/Kernel.php để có thể sử dụng.
Global Middleware
Áp dụng cho tất cả các yêu cầu HTTP.
<?php
protected $middleware = [
\App\Http\Middleware\CheckAdmin::class, ];
Bấm Tải xuống để xem toàn bộ.
Preview text:
@include('partials.header') @yield('content') @include('partials.footer')