Tìm hiểu Laravel - Tạo form đăng nhập (P2)
Bài đăng này đã không được cập nhật trong 3 năm
- Ở bài trước chúng ta đã cùng nhau tìm hiểu cách cài đặt để bắt đầu một project sử dụng Laravel, và kết quả sau khi chạy câu lệnh
php -S localhost:8000 -t public
(lưu ý khi chạy câu lệnh này thì dấu nhắc lệnh phải ở trong thư mục project) ta thu được như hình trên. - Như vậy quá trình cài đặt, cấu hình đã xong, hôm nay ta sẽ tiến hành tạo form đăng nhập, đăng xuất.
1.Cấu hình database
- Để tạo được form đăng nhập, trước tiên ta cần kết nối ứng dụng với database. File cấu hình nằm ở
config/database.php
, mở ra ta có thể thấy Laravel hỗ trợ kết nối 3 kiểu database:sqlite
,mysql
,pgsql
và cấu hình mặc định kết nối đếnmysql
. - Trong bài viết này ta sẽ dùng DB mysql, bạn có thể thay đổi ngay trong file cầu hình
config/database.php
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
],
- Hoặc nếu để ý ta sẽ thấy, Laravel đã cấu hình sẵn cho ta hàm
env()
để gọi đến các config trong file.env
(nếu chưa có file này trong ứng dụng bạn copy từ file .env.example rồi đổi tên đi). Do vậy để kết nối DB ta chỉ cần thay đổi file.env
, chẳng hạn:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_test
DB_USERNAME=root
DB_PASSWORD=root
- Lưu ý: ta phải tạo ra database
laravel_test
từ trước đó, user và pass mysql của mình là lần lượt làroot
vàroot
, bạn thay tương tự. - Tiếp theo ta sẽ tạo bảng users sử dụng migrate với cú pháp:
php artisan make: migration create_users_table
, laravel sẽ tự động tạo ra file migrate trong thư mụcdatabase/migrations/
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
-
Đến đây, thật bất ngờ là trong thư mục
migrations
đã có sẵn 2 file migrate:create_users_table.php
vàcreate_password_reset_table.php
. Laravel đã quá hiểu ý người dùng, cung cấp sẵn luôn cho chúng ta, giờ ta chỉ cần chạy câu lệnhphp artisan migrate
và xem kết quả thu được: -
Quá tuyệt, 2 file migrate đã được chạy và tạo ra 2 bảng
users
,password_reset
(trong bài này ta chỉ cần quan tâm bảng users). À mà thực ra là 3 bảng, ngoài 2 bảng trên thì bảngmigrations
cũng được tạo ra đồng thời lưu thông tin các file migrate đã được chạy.
2.Tạo view, controller, routes
- Bây giờ ta sẽ tiến hành tạo lần lượt routes, views, controller,.. Nhưng ở những bản Laravel mới gần đây, ta có thể sử dụng scaffold để tạo ra tất cả những thứ trên chỉ bằng một câu lệnh:
php artisan make:auth
- Ta test ngay luôn thôi nhỉ:
- Một loạt các views đã được tạo ra trong thư mục
resources/views
,HomeController.php
cũng đã được thêm vào thư mụcapp/Http/Controllers
. Fileroutes.php
thì đã đươc bổ xung như sau:
Route::auth();
Route::get('/home', 'HomeController@index');
Route::auth()
nhìn có vẻ lạ và khá khó hiểu do ở đây họ gọi đến method auth() của lớp Route cha, cụ thể là:
public function auth()
{
// Authentication Routes...
$this->get('login', 'Auth\AuthController@showLoginForm');
$this->post('login', 'Auth\AuthController@login');
$this->get('logout', 'Auth\AuthController@logout');
// Registration Routes...
$this->get('register', 'Auth\AuthController@showRegistrationForm');
$this->post('register', 'Auth\AuthController@register');
// Password Reset Routes...
$this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm');
$this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail');
$this->post('password/reset', 'Auth\PasswordController@reset');
}
- Ta còn có một cách khác để xem toàn bộ route một cách đơn giản và dễ hiểu hơn, đó là sử dụng câu lệnh:
php artisan route:list
- Routes, Views đã xong, scaffold chỉ thấy tạo ra
HomeController
nhưng bên trong chỉ có method index, cònAuthController
,PasswordController
đâu? (??) - Thì ra Laravel đã tạo ra
AuthController
,PasswordController
ngay từ khi khởi tạo project, có lẽ là do tính cần thiết của autheticate ở bất kỳ ứng dụng nào, nên scaffold auth chỉ cần tao ra views và thêm vào routes là xong. - Đến đây ta thử gõ đường dẫn
localhost:8000\login
, ta sẽ nhận được
- Tất nhiên để đăng nhập được bạn phải có tài khoản, nên bạn bấm vào register để đăng ký trước nhé
3. Kết luận
- Qua phần này ta có thể hiểu sơ qua vì sao mà Laravel ngày càng trở nên phổ biến như thế, từ những cái đơn giải nhất họ cũng hộ trợ, và làm cho người dùng cảm thấy đơn giản, dễ dàng nhất. Chỉ cần vài bước ta đã có thể tạo ra form đăng nhập cho ứng dụng mà không mất quá nhiều thời gian công sức.
- Để hiểu rõ hơn bạn có thể tham khảo documment ở trang chủ: Authentication Quickstart
All rights reserved