Tìm hiểu Laravel - Tạo form đăng nhập (P2)

config_success.png

  • Ở 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à rootroot, 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 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.phpcreate_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: php_artisan_migrate.png

  • 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ỉ:

make_auth.png

  • 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', '[email protected]');
  • 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\[email protected]');
        $this->post('login', 'Auth\[email protected]');
        $this->get('logout', 'Auth\[email protected]');

        // Registration Routes...
        $this->get('register', 'Auth\[email protected]');
        $this->post('register', 'Auth\[email protected]');

        // Password Reset Routes...
        $this->get('password/reset/{token?}', 'Auth\[email protected]');
        $this->post('password/email', 'Auth\[email protected]');
        $this->post('password/reset', 'Auth\[email protected]');
    }
  • 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

route_auth.png

  • 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:8000\login, ta sẽ nhận được

login.png

  • 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