Tìm hiểu Laravel - Tạo form đăng nhập (P2)
Ở 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, ...
- Ở 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 đến mysql.
- 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ục database/migrations/
use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; 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ệnh php 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ảng migrations 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ục app/Http/Controllers. File routes.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', 'AuthAuthController@showLoginForm'); $this->post('login', 'AuthAuthController@login'); $this->get('logout', 'AuthAuthController@logout'); // Registration Routes... $this->get('register', 'AuthAuthController@showRegistrationForm'); $this->post('register', 'AuthAuthController@register'); // Password Reset Routes... $this->get('password/reset/{token?}', 'AuthPasswordController@showResetForm'); $this->post('password/email', 'AuthPasswordController@sendResetLinkEmail'); $this->post('password/reset', 'AuthPasswordController@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òn AuthController, 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:8000login, 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é