Hệ thống website là một bản đồ thiết lập định tuyến một đường dẫn mạng đến một đoạn mã xử lý (xử lý giao dịch, tạo giao diện). Trong framework Laravel việc thiết lập này hết sức đơn giản.
Cơ bản về định tuyến
Định tuyến (route) trong Laravel có nghĩa là chỉ dẫn từ một yêu cầu tải một trang đến một đoạn code tương ứng để xử lý (nằm trong các Controller). Các route này nằm trong file:
- Laravel phiên bản 5.2 trở về trước route nằm trong app/Http/routes.php
- Từ phiên bản Laravel 5.3 trở đi route sẽ nằm trong thư mục routes với hai file là web.php và api.php
Các file route sẽ được load vào hệ thống một cách tự động, routes/web.php định nghĩa các route cho web interface với các yêu cầu cần lưu trữ phiên và bảo vệ CSRF (Cross Site Request Forgery là kiểu tấn công sử dụng quyền chứng thực của người khác), còn routes/api.php là các yêu cầu không cần trạng thái. Các cú pháp route cơ bản như sau:
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Để hiểu rõ hơn về route chúng ta đi vào một ví dụ cụ thể: thực hiện yêu cầu chạy đường dẫn http://laravel.dev/hello-world sẽ chạy ra trang Hello World. (Tại sao dùng http://laravel.dev bạn nên đọc qua bài Hướng dẫn cài đặt nhanh Laravel trên Windows, tất cả các ví dụ trong allaravel.com đều sử dụng project laravel-test)
Code file routes/web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/hello-world', function(){
return view('hello-world');
});
Trong thư mục resources/views tạo một file hello-world.blade.php với nội dung như sau:
<html>
<head>
<title>Example 1: Hello World</title>
<link href = "https://fonts.googleapis.com/css?family=Lato:100" rel = "stylesheet" type = "text/css">
<style>
html, body {
height: 100%;
}
body {
margin: 0;
padding: 0;
width: 100%;
display: table;
font-weight: 100;
font-family: 'Lato';
}
.container {
text-align: center;
display: table-cell;
vertical-align: middle;
}
.content {
text-align: center;
display: inline-block;
}
.title {
font-size: 96px;
}
</style>
</head>
<body>
<div class = "container">
<div class = "content">
<div class = "title">Hello world!</div>
</div>
</div>
</body>
</html>
Ok, giờ bạn mở trình duyệt và chạy đường dẫn http://localhost/laravel-test/hello-world kết quả như hình dưới:
Ok, giờ chúng ta sẽ giải thích cơ chế hoạt động của route như sau:
- Khi một yêu cầu trang web đưa ra, yêu cầu này được gửi đến Laravel
- Laravel sẽ tìm trong file routes/web.php xem có chỉ dẫn nào phù hợp
- Nếu chỉ dẫn phù hợp có, nó sẽ thực thi theo chỉ dẫn (return view('hello-world'))
Các tham số trong định tuyến
Trong một ứng dụng web chúng ta thường truyền các tham số thông qua URL, ví dụ về một trang sản phẩm: https://phukien239.vn/san-pham/bo-phat-wifi-tenda-fh304-3-angten-p139.html https://phukien239.vn/san-pham/bo-phat-wifi-tenda-n300-2-ang-ten-p141.html chúng ta thấy phần https://phukien239.vn/san-pham/ là chung thể hiện đây là trang sản phẩm, còn phần đằng sau chính là tham số để xác định xem sản phẩm này là gì?
Tham số bắt buộc trong định tuyến
Những tham số bắt buộc phải có, chúng ta sẽ định nghĩa trong dấu {} như dưới đây:
Route::get('/hello-world/{year}', function($year){
echo ('Hello world, ' . $year);
// return view('hello-world');
});
Ở đây, khi vào đường dẫn http://laravel.devt/hello-world/2017 thì các tham số sau http://laravel.devt/hello-world/ là bắt buộc phải có, nếu không có sẽ báo lỗi ngay.
Bạn hãy thử thay số 2017 bằng một số bất kỳ, hoặc bỏ đi rồi xem kết quả nhé.
Tham số tùy chọn trong định tuyến
Có những lúc chúng ta muốn rằng tham số truyền vào URL có thể không có giá trị, ví dụ khi đánh vào http://phukien239.vn/san-pham thì định hướng người dùng đến trang danh sách sản phẩm chẳng hạn. Chúng ta xem ví dụ sau:
Route::get('/hello-world/{year}/{yourname?}', function($year, $yourname = null){
if($yourname == null){
echo ('Hello world, ' . $year);
}else{
echo ('Hello world, ' . $year . '. My name is ' . $yourname);
}
// return view('hello-world');
});
Khi đó nếu chúng ta truy cập vào http://localhost/laravel-test/2017/laravel chúng ta sẽ được kết quả như sau:
Còn nếu khi truy cập http://localhost/laravel-test/2017 thì chúng ta nhận được kết quả:
Như vậy tham số thứ hai trong route đưa vào là tùy chọn. Nếu bạn muốn truyền các tham số về năm và tên cho view hello-world để hiển thị cho đẹp chúng ta thay đổi lại file routes/web.php:
Route::get('/hello-world/{year}/{yourname?}', function($year, $yourname = null){
$hello_string = '';
if($yourname == null){
$hello_string = 'Hello world, ' . $year;
}else{
$hello_string = 'Hello world, ' . $year . '. My name is ' . $yourname;
}
return view('hello-world')->with('hello_str', $hello_string);
});
và resources/views/hello-world.blade.php như sau:
<html>
<head>
<title>Example 1: Hello World</title>
<link href = "https://fonts.googleapis.com/css?family=Lato:100" rel = "stylesheet" type = "text/css">
<style>
html, body {
height: 100%;
}
body {
margin: 0;
padding: 0;
width: 100%;
display: table;
font-weight: 100;
font-family: 'Lato';
}
.container {
text-align: center;
display: table-cell;
vertical-align: middle;
}
.content {
text-align: center;
display: inline-block;
}
.title {
font-size: 96px;
}
</style>
</head>
<body>
<div class = "container">
<div class = "content">
<div class = "title">{{ $hello_str }}</div>
</div>
</div>
</body>
</html>
Kết quả khi vào http://laravel.dev/hello-world/2017/laravel như sau:
Như vậy kiến thức cơ bản về khái niệm route trong Laravel đã được đưa ra ở trên, trong các bài tiếp theo chúng ta sẽ hiểu thêm về các dạng route, khái niệm RESTful route, tiếp đó chúng ta sẽ làm quen với Controller để biết cách định tuyến từ yêu cầu sang controller sau đó chuyển sang views (Trong bài viết này để giúp bạn làm quen nhanh chóng với route, chúng ta đã bỏ qua phần định tuyến qua Controller).
CÁC BÀI VIẾT KHÁC
phuongtt
5 years ago
Phản hồiFirebirD
5 years ago
Phản hồiphuongtt
5 years ago
Phản hồicu tèo
5 years ago
Phản hồiTheAnh
5 years ago
Phản hồiTheAnh
5 years ago
Phản hồiFirebirD
5 years ago
Phản hồiTheAnh
5 years ago
Phản hồitruong
4 years ago
Phản hồiFirebirD
4 years ago
Phản hồithinh
3 years ago
Phản hồiNhiều ảnh trên web bị lỗi, ko hiển thị được nữa. Mong admin chỉnh sửa lại
FirebirD
3 years ago
Phản hồiTrong quá trình chuyển đổi lên OctoberCMS gặp một số lỗi, BQT đã fix lại rồi bạn nhé. Thanks bạn đã góp ý.
Sơn
3 years ago
Phản hồiBác cho em hỏi sêri laravel này là bản bao nhiêu ạ? Và nếu học hết seerri này thì đã đủ để làm thực tế 1 trang web laravel cơ bản chưa ạ? em cảm ơn!
FirebirD
2 years ago
Phản hồiCũng khá lâu rồi từ 2017, phiên bản Laravel thời đấy tầm cuối 4.x đầu 5.x, tuy nhiên những gì cốt lõi không thay đổi nhiều do đó bạn có thể học từ series này. Các kiến thức này đủ để bạn làm một website phức tạp.
Thanh
2 years ago
Phản hồiA cho em hỏi là mới bắt đầu qua laravel thì học series này trước hay là học qua series to do list trước ạ
Trí
2 years ago
Phản hồiAdmin ơi cho mình hỏi: + Ví dụ khi mình tao route có tên là Hello Thì khi ra trình duyệt phải gõ là :tenmien.com/index.php/Hello Còn nếu mình gõ : tenmien/Hello thì sẽ bị lỗi 404 ad bik cách sữa hk chỉ mình với Thank ad nhìu!
Thế Anh
2 years ago
Phản hồiHi Trí. Bạn thử vào theo mặc đinh của laravel tenmien/public/hello