# I. Cài đặt Laravel
Để cài đặt Laravel, bạn cần thực hiện một số bước cơ bản. Dưới đây là hướng dẫn cài đặt Laravel sử dụng Composer, một công cụ quản lý gói PHP:
**Bước 1: Yêu cầu hệ thống**
- Laravel yêu cầu PHP phiên bản 7.3 trở lên và một số extension PHP như `mbstring`, `xml`, `bcmath`, và `json` được cài đặt. Đảm bảo máy tính của bạn đáp ứng các yêu cầu này.
**Bước 2: Cài đặt Composer**
- Composer là một công cụ quản lý gói PHP và là bước quan trọng để cài đặt Laravel. Truy cập [trang web Composer](https://getcomposer.org/) để biết cách cài đặt nó theo hướng dẫn cho hệ điều hành bạn đang sử dụng.
**Bước 3: Tạo một dự án Laravel mới**
- Mở terminal hoặc command prompt và chuyển đến thư mục nơi bạn muốn tạo dự án Laravel.
- Chạy lệnh sau để tạo dự án Laravel mới:
```bash
composer create-project --prefer-dist laravel/laravel tên_dự_án
```
Thay thế `tên_dự_án` bằng tên bạn muốn đặt cho dự án của mình.
**Bước 4: Cấu hình file environment**
- Sao chép file `.env.example` thành một file mới có tên `.env`. Mở file `.env` và cấu hình các thông số như cơ sở dữ liệu, mail, và các thiết lập khác.
**Bước 5: Tạo key ứng dụng Laravel**
- Trong terminal, chạy lệnh sau để tạo key ứng dụng Laravel:
```bash
php artisan key:generate
```
**Bước 6: Chạy ứng dụng Laravel**
- Chạy lệnh sau để khởi động máy chủ phát triển của Laravel:
```bash
php artisan serve
```
Mở trình duyệt và truy cập `http://localhost:8000` (hoặc port khác nếu cần). Bạn sẽ thấy trang chào mừng của Laravel.
Đó là những bước cơ bản để cài đặt Laravel. Bạn cũng có thể tham khảo tài liệu chính thức của Laravel để biết thêm chi tiết và các chức năng khác của framework.
---
# II. Cấu trúc thư mục Laravel
Laravel có một cấu trúc thư mục tiêu chuẩn giúp tổ chức và quản lý code của ứng dụng một cách rõ ràng và hiệu quả. Dưới đây là mô tả về cấu trúc thư mục chính của một dự án Laravel (phiên bản 8.x trở lên, tình trạng tính đến thời điểm kiến thức cuối cùng của tôi vào tháng 4 năm 2023):
### Thư mục gốc của ứng dụng
- **`/app`**: Chứa mã nguồn PHP chính của ứng dụng. Đây là nơi bạn sẽ tìm thấy Models, Controllers, và các dịch vụ khác.
- **`/Models`**: Chứa các model Eloquent.
- **`/Http`**: Chứa Controllers và Middleware.
- **`/Console`**: Chứa các lệnh Artisan tùy chỉnh.
- **`/Providers`**: Chứa service providers.
- **`/bootstrap`**: Chứa các file khởi động ứng dụng.
- **`/config`**: Chứa các file cấu hình của ứng dụng.
- **`/database`**: Chứa các migration, model factories, và seeds.
- **`/migrations`**: Chứa các file migration để cấu trúc database.
- **`/factories`**: Chứa các factory để tạo dữ liệu mẫu.
- **`/seeds`**: Chứa các seeder để điền dữ liệu vào database.
- **`/public`**: Thư mục gốc của web server; chứa file `index.php`, tài nguyên CSS, JavaScript, và hình ảnh.
- **`/resources`**: Chứa các view, file nguồn sass, và raw assets.
- **`/views`**: Chứa các file blade template của ứng dụng.
- **`/lang`**: Chứa các file ngôn ngữ.
- **`/routes`**: Chứa tất cả các file định tuyến.
- **`web.php`**: Định tuyến cho web interface.
- **`api.php`**: Định tuyến cho API.
- **`/storage`**: Chứa compiled Blade templates, file-based sessions, file caches, và các file khác được Laravel tạo ra.
- **`/app`**: Thường được sử dụng để lưu trữ các file tải lên.
- **`/framework`**: Chứa các file cache, session, và view compiled.
- **`/logs`**: Chứa log files của ứng dụng.
- **`/tests`**: Chứa các test tự động (PHPUnit tests).
- **`/vendor`**: Chứa các gói Composer dependencies.
### File gốc
- **`.env`**: File cấu hình môi trường, nơi bạn đặt các biến môi trường như cấu hình database, mail, v.v.
- **`composer.json`**: File cấu hình Composer, quản lý các phụ thuộc PHP.
- **`artisan`**: File thực thi cho Laravel Artisan, công cụ dòng lệnh của Laravel.
Cấu trúc thư mục của Laravel được thiết kế để tối ưu hóa tổ chức và quản lý code, giúp phát triển ứng dụng trở nên dễ dàng và hiệu quả hơn.
---
# III. Một ví dụ về Laravel
Để thiết lập các chức năng CRUD (Create, Read, Update, Delete) cho một bảng `students` trong Laravel, bạn sẽ cần thực hiện các bước sau:
1. **Tạo Model và Migration**
2. **Tạo Controller**
3. **Định nghĩa Routes**
4. **Tạo Views**
### Bước 1: Tạo Model và Migration
Mở terminal và chạy lệnh sau để tạo model `Student` cùng với migration của nó:
```bash
php artisan make:model Student -m
```
Sau đó, mở file migration trong thư mục `database/migrations` và thêm các trường cho bảng `students`:
```php
Schema::create('students', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
```
Chạy migration:
```bash
php artisan migrate
```
### Bước 2: Tạo Controller
Tạo một controller với các phương thức CRUD:
```bash
php artisan make:controller StudentController --resource
```
Mở file `StudentController.php` và thêm logic cho các phương thức. Ví dụ:
```php
use App\Models\Student;
use Illuminate\Http\Request;
// ...
public function index()
{
$students = Student::all();
return view('students.index', compact('students'));
}
public function create()
{
return view('students.create');
}
public function store(Request $request)
{
Student::create($request->all());
return redirect()->route('students.index');
}
// Tương tự cho các phương thức show, edit, update, và destroy
```
### Bước 3: Định nghĩa Routes
Mở file `routes/web.php` và thêm:
```php
use App\Http\Controllers\StudentController;
Route::resource('students', StudentController::class);
```
### Bước 4: Tạo Views
Tạo các view tương ứng cho các hành động CRUD trong thư mục `resources/views/students`.
Ví dụ, tạo file `create.blade.php` để thêm mới student:
```php
{{-- resources/views/students/create.blade.php --}}
<form action="{{ route('students.store') }}" method="POST">
@csrf
<label for="name">Name:</label>
<input type="text" name="name" id="name" required>
<label for="email">Email:</label>
<input type="email" name="email" id="email" required>
<button type="submit">Submit</button>
</form>
```
Tương tự, bạn cần tạo các view cho `index`, `edit`, `show`, và một form xóa trong `edit` hoặc `index`.
### Kết luận
Đây là cấu trúc cơ bản cho việc xây dựng chức năng CRUD trong Laravel. Bạn cần điều chỉnh và mở rộng nó tùy theo yêu cầu cụ thể của ứng dụng của bạn, như thêm xác thực dữ liệu, xử lý lỗi, phân trang, v.v.
---
# IV. Tạo chức năng đăng nhập, đăng ký trong Laravel
Laravel Fortify là một tính năng xác thực backend cho Laravel, cung cấp kiểm soát hành vi xác thực bằng cách sử dụng các dịch vụ và callback, cho phép bạn xây dựng xác thực frontend theo cách của mình. Fortify hỗ trợ các tính năng như đăng nhập, đăng ký, xác nhận email, đặt lại mật khẩu và xác nhận hai yếu tố.
### Bước 1: Cài đặt Laravel Fortify
Để bắt đầu, bạn cần cài đặt Fortify thông qua Composer. Trong dự án Laravel của bạn, chạy lệnh sau:
```bash
composer require laravel/fortify
```
### Bước 2: Xuất Bản Cấu Hình
Sau khi cài đặt, xuất bản tệp cấu hình Fortify:
```bash
php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"
```
### Bước 3: Cài Đặt Cấu Hình
Mở file cấu hình `config/fortify.php` và thực hiện các thay đổi cần thiết. Bạn có thể bật hoặc tắt các tính năng như đăng ký, đặt lại mật khẩu, xác nhận email, v.v.
### Bước 4: Migration
Fortify yêu cầu một số bảng cơ sở dữ liệu cho các tính năng như đặt lại mật khẩu. Nếu bạn chưa chạy migrations cho Laravel, hãy chạy:
```bash
php artisan migrate
```
### Bước 5: Định Nghĩa Actions
Fortify sử dụng các "actions" để xử lý logic xác thực. Bạn cần định nghĩa các actions này trong `App\Providers\FortifyServiceProvider` trong phương thức `boot`.
Ví dụ, để định nghĩa logic cho đăng ký:
```php
use Laravel\Fortify\Fortify;
use App\Models\User;
Fortify::registerView(function () {
return view('auth.register');
});
Fortify::createUsersUsing(function (array $data) {
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
});
```
Tương tự, bạn cần định nghĩa views và actions cho các tính năng khác như đăng nhập, đặt lại mật khẩu, v.v.
### Bước 6: Tạo Views
Fortify không cung cấp các view, vì vậy bạn cần tạo chúng. Bạn có thể tạo các file blade trong `resources/views/auth` cho đăng nhập, đăng ký, v.v.
### Bước 7: Định Nghĩa Routes
Fortify không tự động định nghĩa routes, vì vậy bạn cần thêm chúng vào file `routes/web.php` của mình. Ví dụ:
```php
Route::get('/login', function () {
return view('auth.login');
})->middleware(['guest'])->name('login');
Route::get('/register', function () {
return view('auth.register');
})->middleware(['guest'])->name('register');
// Các routes khác
```
### Kết luận
Sử dụng Laravel Fortify, bạn có thể xây dựng một hệ thống xác thực tùy chỉnh, linh hoạt với các tính năng cần thiết mà không cần phải lo lắng về phần frontend. Điều này rất hữu ích khi bạn muốn sử dụng các framework frontend khác nhau hoặc tùy chỉnh giao diện người dùng theo cách của mình.