Cách sử dụng Route:

Một phần của tài liệu Xây dựng Website bán mỹ phẩm trực tuyến sử dụng Framework Laravel. (Trang 28 - 34)

Khái niệm về Route: Route thực hiện chức năng định tuyến, dẫn đường cho các HTTP request được gởi đến đúng nơi ta muốn nó đến. Với các ứng dụng web ngày nay, việc làm cho ứng dụng có chức năng tốt – giao diện đẹp là một chuyện, nhưng để có một trang web thực sự tốt thì “đường dẫn thân thiện” là không thể thiếu.Ví dụ bạn có 1 trang web thể hiện danh sách xe hơi của hãng Honda:

http://showrom.com/category.php?vendor=honda&type=car

Thay vì để một đường dẫn ngớ ngẩn như vậy, chúng ta cần tạo ra 1 trang web có thể chạy dưới đường dẫn “đẹp” kiểu như:

http://showrom.com/car/honda

Đường dẫn đẹp thì có lợi cho người dùng, rất hiệu quả về mặt marketing cũng như SEO. Nhưng để tạo được đường dẫn đẹp như vậy thường là nỗi đau khổ khi viết bằng cú pháp trong .htaccess. Nắm bắt được điều này, Laravel đã sớm đưa ra tính năng routing để tạo ra các đường dẫn đẹp và đơn giản, mà hiệu quả.

Sinh viên thực hiện: Nguyễn Linh – 12CNTT 18

Căn bản về Route: Cần định nghĩa hầu hết các route của mình trong file App/Http/route.php . Cú pháp cơ bản để tạo route dùng 2 tham số là chuỗi URI và 1 Closure (hàm nặc danh):

Route::get('/', function () { return 'Hello World'; });

Route::post('foo/bar', function () { return 'Hello World';

});

Route::put('foo/bar', function () { });

Route::delete('foo/bar', function () { });

Trong đó các hàm get(), post(), put(), delete() chính là các HTTP METHOD dùng cho route. Tham số thứ nhất – URI – là phần phía sau domain trang web. Tham số thứ 2 là hàm nặc danh, thực hiện xử lý cho từng route. Thử truy cập vào địa chỉhttp://localhost/ bạn sẽ thấy từ “Hello World”, nhưng khi vào http://localhost/foo/bar thì lại không thấy gì, do phải gởi request qua POST thì request mới qua route này.

Đăng ký route cho nhiều METHOD cùng lúc: Đôi khi bạn sẽ cần xử lý và response giống nhau trên nhiều method, bạn có thể sử dụng hàm Route::match() đểđăng ký cùng lúc nhiều method khác nhau:

Route::match(['get', 'post'], '/', function () { return 'Hello World';

});

Hoặc dùng hàm Route::any() đểđăng ký cho tất cả các method:

Sinh viên thực hiện: Nguyễn Linh – 12CNTT 19

return 'Hello World'; });

Đặt tên cho route và tạo URL

Để khai báo tên cho route, sử dụng từ khóa as :

Route::any('foo', function () { return 'Hello World';

});

Tương tự cũng có thểđặt tên cho route trỏ tới controller actions

Route::get('user/profile', [ 'as' => 'profile', 'uses' => UserController@showProfile']);

Việc đặt tên giúp bạn dễ dàng tạo URL mong muốn. Ví dụ, để tạo URL đến trang profile cá nhân: route('profile')

Khi số lượng route trên website của bạn tăng lên, các URI dài và khó nhớ, việc đặt tên sẽ hiệu quả hơn nhiều so với việc bạn cộng chuỗi để tạo ra các URL mong muốn.

Route có tham số: Sử dụng tham số rất thường xuyên, sẽ có nhu cầu lấy thông tin trong URL người dùng truy cập. Đó có thể là username, id của người dùng; slug của một bản tin, v.v… Có thể định nghĩa tham số trong route như sau:

Route::get('user/{id}', function ($id) { return 'User '.$id;

});

Định nghĩa nhiều tham số khác nhau trong URI theo nhu cầu sử dụng:

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {

// });

Sinh viên thực hiện: Nguyễn Linh – 12CNTT 20

Chú ý: Các tham số phải được định nghĩa trong cặp dấu {} , tên tham số

không được chứa dấu (-) nếu cần có thể dùng dấy gạch dưới (_) để thay thế. Tham số không bắt buộc: Đôi khi sẽ có những route với tham số là không bắt buộc, có cũng được, không có cũng được. Với các tham số dạng này có thể đặt dấu ( ? ) ngay sau tên tham sốđểđánh dấu nó là tham số không bắt buộc:

Route::get('user/{name?}', function ($name = null) { if ($name == null)

//Response với trang profile của user hiện tại else

//Response với trang profile của user xác định theo $name });

Xác định tham số theo “mẫu ký tự” – Regular Expression:Chúng ta có thể dùng Regex để qui định dạng mẫu cho các tham số ở cùng một vị trí trong URI, bằng cách dùng hàmwhere() để khai báo dạng mẫu gì thì tương ứng với tham số nào.

Route::get('user/{name}', function ($name) {

// Xem tham sốở vị trí này là tên, nhận giá trị chuỗi })

->where('name', '[A-Za-z]+');

Route::get('user/{id}', function ($id) {

// Xem tham sốở vị trí này là id, nhận giá trị số

})

->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) { //

})

Sinh viên thực hiện: Nguyễn Linh – 12CNTT 21

Tạo nhóm route: Tạo nhóm route giúp chúng ta chia sẻ các thành phần dùng chung, giống nhau giữa các route như middleware, namespace hay prefix. Để khai báo các chia sẻ này, ta viết vào một mảng và đặt vào tham số thứ nhất của hàm Route::group()

Chúng ta có một số trường hợp chia sẻ trong nhóm như sau:

Chia sẻ middleware: Middelware là một bộ lọc, request phải qua bộ lọc này kiểm tra-xử lý gì đó trước khi được gởi tới phần code mà đã được khai báo trong route hay controller actions. Dễ hiểu nhất là trường hợp kiểm tra người dùng đăng nhập rồi mới cho phép comment chẳng hạn. Để chia sẻ middleware giữa một nhóm route, sử dụng từ khóa middleware :

Route::group(['middleware' => 'auth'], function () { Route::get('/backend', function () {

// User đăng nhập mới vào được backend });

Route::get('user/profile', function () {

// User đăng nhập mới vào được trang cá nhân });

});

Chia sẻ namespace:Một trường hợp phổ biến khác là chia sẻ namespace giữa một nhóm các controller. Sử dụng từ khóa namespace để khai báo:

Route::group(['middleware' => 'auth'], function () { Route::get('/backend', function () {

// User đăng nhập mới vào được backend });

Route::get('user/profile', function () {

// User đăng nhập mới vào được trang cá nhân });

Sinh viên thực hiện: Nguyễn Linh – 12CNTT 22

});

Nên nhớ routes.php tự hiểu namespace chung của các controller là App\Http\Controllers nên không cần phải ghi cụ thể ra, chỉ cần ghi tên Controller.

Chia sẻ tiền tố của URI: Prefix có thể dùng để đặt tiền tố cho một nhóm URI mong muốn. Ví dụ, muốn gom nhóm tất cả các route của trang quản lý website với tiền tố “backend”:

Route::group(['prefix' => 'backend'], function () { Route::get('users', function () {

// Tương ứng với URL "/backend/users" });

Route::get('articles', function () { // Tương ứng với "/backend/articles" });

})

Cũng có thểđặt tham số trong tiền tố như route bình thường:

Route::group(['prefix' => 'accounts/{account_id}'], function () { Route::get('detail', function ($account_id) {

// Tương ứng với URL /accounts/{account_id}/detail });

Sub-domain routing: Đặc biệt hơn, Laravel còn có khả năng gom nhóm route trên sub-domain, có thể đặt tham số giống như route bình thường khác. Sử dụng từ khóa domain để khai báo:

Route::group(['prefix' => 'accounts/{account_id}'], function () { Route::get('detail', function ($account_id) {

// Tương ứng với URL /accounts/{account_id}/detail });

Sinh viên thực hiện: Nguyễn Linh – 12CNTT 23

Một phần của tài liệu Xây dựng Website bán mỹ phẩm trực tuyến sử dụng Framework Laravel. (Trang 28 - 34)

Tải bản đầy đủ (PDF)

(102 trang)