Từ các ví dụ ở bài học trước, bạn có thể thấy routes.php có thể được sử dụng để hướng luồng thực thi của ứng dụng và gọi trực tiếp View để trả về kết quả. Tuy nhiên, cách làm này chỉ thích hợp cho các trang có nội dung đơn giản. Với các trang đòi hỏi phải xử lý các công việc phức tạp hơn như giới hạn một số người đặc biệt mới có thể truy cập vào trang, hay trang web yêu cầu xử lý dữ liệu từ database thì sử dụng Controller sẽ giúp quản lý mã lệnh gọn gàng hơn.
Hãy xem một ví dụ sau: bạn muốn trang chứa thông tin tối quan trọng trong ứng dụng của mình chỉ có thể được xem bởi người dùng đặc biệt gọi là admin. Và nếu như người dùng không phải là admin thì không thể xem trang đó được. Chúng ta giả sử trang có duy nhất một người dùng với thông tin sau:
- username: admin
- password: secrete
Và để vào trang đặc biệt này người dùng sẽ phải truy cập vào địa chỉ mà trên đó bao gồm tên đăng nhập và mật khẩu liền nhau theo dạng sau http://laravelapp.dev/{username}/{password}.
OKay, bây giờ chúng ta bắt đầu triển khai tính năng này bằng việc đầu tiên là khai báo một route cho địa chỉ URL với định dạng như trên:
Route::get('/{username}/{password}', function ($username, $password)
{
if ($username !== 'admin') {
$error = 'Tên đăng nhập không đúng';
return View::make('error_page')->withError($error);
} else if ($password != 'secrete') {
$error = 'Mật khẩu không đúng';
return View::make('error_page')->withError($error);
} else {
return View::make('restrict_page')->withUsername($username);
}
});
Trong đoạn mã trên chúng ta kiểm tra xem tên truy cập và mật khẩu có trùng với thông tin của người dùng admin hay không. Nếu không đúng thì chúng ta sẽ hiển thị trang error_page với thông tin lỗi tương ứng là sai tên đăng nhập hay sai mật khẩu. Bước tiếp theo bạn cần làm sau khi khai báo route như trên là tạo 2 file view error_page.php và restricted_page. Trong app/views tao file error_page.php với nội dung như sau:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Học Laravel trên TuiCoding.com</title>
</head>
<body>
<p>Bạn không có quyền truy cập trang với lý do <strong><?php echo $error; ?></p>
</body>
</html>
Và restrict_page.php cũng trong cùng thư mục với nội dung sau:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Học Laravel trên TuiCoding.com</title>
</head>
<body>
<p>Chào <?php echo $username; ?></p>
<p>Trang này chỉ có thể được truy cập nếu như bạn nhập đúng usernam và password : )</p>
</body>
</html>
Bây giờ chúng ta sẽ test ứng dụng bằng cách truy cập vào địa chỉ /admin/wrong_password (ở đây tôi bỏ qua tên host và giao thức http để bạn tiện theo dõi), bạn sẽ thấy kết quả như sau:

Tiếp theo, bạn truy cập vào địa chỉ /admin/secrete, lúc này bạn sẽ thấy trang hiển thị kết quả:

Ở trên bạn có thể thấy là việc kiểm soát luồng thực thi của chương trình được thực hiện hoàn toàn trong Route. Việc này sẽ trở lên khó quản lý nếu như chúng ta có nhiều route và mỗi route có thể phải xử lý nhiều trường hợp phức tạp hơn. Vì vậy chúng ta sẽ sử dụng Controller để giải quyết vấn để này. Thay đổi đoạn mã mà chúng ta vừa thêm vào file routes.php ở trên bằng đoạn mã sau:
Route::get('/{username}/{password}', 'HomeController@secrete');
Với đoạn mã này, việc xử lý các yêu cầu gửi tới có dạng /{username}/{password} sẽ được chuyển qua cho method secrete ở HomeController. Tiếp theo chúng ta cần thêm method secrete vào HomeController:
public function secrete($username, $password)
{
if ($username !== 'admin') {
$error = 'Tên đăng nhập không đúng';
return View::make('error_page')->withError($error);
} else if ($password != 'secrete') {
$error = 'Mật khẩu không đúng';
return View::make('error_page')->withError($error);
} else {
return View::make('restrict_page')->withUsername($username);
}
}
Method secrete lúc này chứa mã lệnh xử lý giống với mã lệnh của hàm callback mà chúng ta đã thêm vào ở trên.
Bây giờ nếu bạn truy cập 2 địa chỉ /admin/wrong_password và /admin/secrete trên trình duyệt bạn sẽ thấy kết quả giống như những gì bạn làm ở trên.
Với việc sử dụng Controller chúng ta có thể phân tách mã lệnh của ứng dụng ra các phần khác nhau tương ứng với loại nhiệm vụ mã mã lệnh đó cần thực hiện. Việc phân luồng sẽ được đặt vào trong routes.php việc kiếm soát luồng tiếp theo được xử lý bởi Controller và việc hiển thị, trình bày nội dung sẽ được thực hiện ở trong View.
Nguồn: CodeHub.vn
Không có nhận xét nào:
Đăng nhận xét