Bài 3. Làm việc với Route trong Laravel 5

Bài trước mình đã giới thiệu về cấu trúc thư mục trong Laravel 5. Bài hôm nay chúng ta sẽ đi tổng quan về Route và cách sử dụng route trong Laravel 5.

Mục Lục:

1. Hiểu về route trong Laravel

  • Tất cả các routes(định tuyến) của Laravel chứ trong thư mục routes/web.php Các file trong thư mục này sẽ được tải tự động bởi Laravel.File routes/web.php định nghĩa các định tuyến cho giao diện web của bạn. Ngoài ra ở phiên bản 5.3 so với các phiên bản trước nó còn có thêm routes/api.phproutes/console.php. Về cơ bản chỉ là tách nhỏ routes ra theo chức năng, nên ta sẽ định nghĩa các định tuyến từ file routes/web.php.
  • Ta hiểu môn na như sau: khi index.blade.php nhận được 1 request từ người dùng, nó sẽ đưa request đó về route, từ route sẽ định tuyến cho request đó đi đâu tiếp theo.
  • Ví dụ: Khi người dùng truy cập vào đường dẫn: http://laedaily.com/article, thì lúc này route sẽ nhận url là /articles, sau đó nó sẽ gửi request đó tời Controller tương ứng để xử lý.
  • Tóm lại, chúng ta chỉ cần hiểu route trong laravel đóng vai trò định tuyến(điều hướng request).

Route trong Laravel 5 (bản 5.4) được định nghĩa trong routes/web.php. Danh sách các route cơ bản:

  • Route::get : tương tự như method get() trong PHP Route::post : tương tự như method post() trong PHP Route::group : gom các route có điểm chung với nhau thành 1 nhóm. Route::match : kết hợp nhiều method. Route::any : nhận tất cả các method.

Ngoài ra còn có:

  • Route::filter : tạo bộ lọc. ví dụ tạo bộ lọc kiểm ta login
  • Route::controller : gọi đến Controller tương ứng
  • Route::resource : sử dụng với resource controller

2. Các loại route trong Laravel 5 và cách sử dụng:

Route::get()

Đây là route tiếp nhận các request với method get(). Cú pháp:

        Route::get($uri, $ac);
        // $ac có thể là mảng, hàm hoặc chuổi
    

Ví dụ 1: Khi action là một hàm

        Route::get('/demo_get', function () {
            echo 'Đây là ví dụ route get';
        });
    

Bạn truy cập vào địa chỉ: http://localhost/blog/public/demo_get sẽ thấy kết quả:

Ví dụ 2: Khi action là một mảng

        Route::get('/demo_get', ['as' => 'getMethod', 'uses' => 'DemoController@index']);
        // getMethod là tên route
        // uses sẽ gọi tới method index trong DemoController
    

Các bạn phải khởi tạo controller DemoController bằng lệnh:

        $ php artisan make:controller DemoController
    

Mở file blog/app/Http/Controllers/DemoController.php lên thêm vào function index

        
    

Bạn truy cập vào địa chỉ: http://localhost/blog/public/demo_get sẽ thấy kết quả giống như ví dụ 1.

Route::post()

Đây là route tiếp nhận các request với method post(). Cú pháp:

        Route::post($uri, $ac);
        // $ac có thể là mảng, hàm hoặc chuổi
        // tương tự như route get
    

Vậy khi nào dùng get, khi nào dùng post. Ta sẽ đi vào ví dụ sau:

Trong file routes/web.php bạn tạ 2 route:

        Route::get('/login', ['as' => 'getLogin', 'uses' => 'DemoController@getLogin']);
        Route::post('/login', ['as' => 'postLogin', 'uses' => 'DemoController@postLogin']);
    

Trong file DemoController.php bạn tạo 2 function như sau:

        user == 'admin' && $request->pass == '123')
                {
                    echo "Login thành công";
                }
                else
                {
                    echo "Login thất bại";
                }
            }
        }
        ?>
    

Tạo 1 view có tên là login.blade.php trong thư mục resources/views có nội dung:

        

Bạn truy cập vào địa chỉ: http://localhost/login sẽ thấy kết quả giống như sau:

Ta thấy nó nhận hiển thị form login mà ta đã tạo ở file login.blade.php. Vì đây là method get lấy nhận request GET đưa về function getLogin() của controller DemoControler và function này return về view login

Tiếp theo nhập vào thông tin và nhấn submit (Username: admin Password: 123)

Kết quả:

Ta thấy nó nhận hiển thị Login thành công. Có thể hiểu khi ta nhấn submit thì các thông tin user, pass, token sẽ đưa về route post, route này sẽ đưa về function postLogin() của controller DemoControler và function này kiểm tra dữ liệu nhập vào và xuất ra thông báo

Khác với PHP ta lấy dữ liệu bằng $_POST["user"] đối với Laravel chỉ cần sử dụng Request như trong file DemoController.php

Route::group()

Nó sẽ nhóm có route có điểm chung lại với nhau.

Ví dụ:

Không sử dụng Route::group()

        Route::get('admin/category/list', function(){});
        Route::get('admin/category/insert', function(){});
        Route::get('admin/category/list', function(){});
    

Sử dụng Route::group()

        Route::group('prefix' => 'admin', function () {
            Route::get('category/list', function(){});
            Route::get('category/insert', function(){});
            Route::get('category/list', function(){});
        });
    

Sử dụng hay không sử dụng thì các route trên đều có mục đích sử dụng giống nhau. Việc nhóm như thế này sẽ giúp bạn dễ dàng trong việc quản lý code hơn.

Route::match()

Ngoài các method POST và GET phổ biến trong laravel còn có thêm PUT, PATCH, DELETE vậy nên sinh ra Route này.

Cú pháp:

        Route::match($methods, $uri, $action);
        //trong đó $methods có thể là 1 mảng các method như ['GET', 'POST','PUT']
        //$uri và $action giống như các route kể trên
    

Ví du:

        Route::match(['GET', 'POST','PUT'],'/demo',function(){
            return 'match route';
        });
    

Route này sẽ nhận request với 3 method là PUT, POST, GET

Route::any()

Cú pháp và cách sử dụng của loại route này không khác Route::get() là mấy, chỉ có điều route này nhận request với tất cả các method như: POST, GET, DELETE, ...

Cú Pháp

        Route::any($uri, $action);
    

Trong bài này mình đã giới thiệu về Route trong Laravel 5. Trong series bài viết tiếp theo mình sẽ hướng dẫn các bạn về View trong Laravel 5. Mời các bạn đón đọc. Bài viết trên là những hiểu biết của cá nhân mình nên không tránh phải sai sót, rất mong sự đóng góp ý kiến của các bạn để bài viết trở nên hữu ích hơn.