
Ra mắt hai series mới cực hot Trí tuệ nhân tạo A đến Z và Python công cụ không thể thiếu khi nghiên cứu Data science, Machine learning.
Todo List: Giới thiệu mô hình MVC trong Laravel
Trong 6 bài đầu tiên của Khóa học Laravel cơ bản với ứng dụng Todo List, chúng ta đã làm quen với các thành phần trong mô hình MVC và các khái niệm tương ứng bên Laravel như Model, View, Controller, Route, Migration, Factory và Seeder. Tuy nhiên, các khái niệm này đang rất rời rạc chưa có sự kết nối với nhau. Trong bài hôm nay, chúng ta sẽ tổng hợp lại các kiến thức này về một mối đó chính là cách mô hình MVC được áp dụng vào Laravel.
Hiển thị danh sách Todos
Tạm chưa nói đến về MVC, chúng ta hoàn thành nốt nhiệm vụ ở bài số 4, trong bài này khi click vào đường dẫn Todos ở trang chủ ứng dụng, nó dẫn đến trang danh sách todos nhưng hiện chúng ta mới chỉ hiển thị mỗi dòng TODOS PAGE.
Trong phương thức index() của TodosController (nằm trong thư mục app\Http\Controllers) chỉ thực hiện đơn giản là trả về View 'todos.index':
public function index()
{
return view('todos.index');
}
Trước khi trả về view này, có thể thực hiện các công việc như lấy danh sách todos từ database, giờ là lúc sử dụng đến model Todo đã tạo ra ở bài số 5. Mặc định, khi tạo ra một model trong Laravel tên là ABC thì nó sẽ được ánh xạ 1-1 sang tương ứng với một bảng dữ liệu tên abcs trong database. Ở đây, chúng ta có model Todo, nó sẽ tương ứng với bảng todos trong database. Nếu bạn muốn nó ánh xạ sang một bảng dữ liệu tên khác thì thiết lập thêm cho thuộc tính $table trong model đó:
protected $table = 'my_todos';
Giả sử bạn muốn model Todo được ánh xạ sang bảng my_todos thay vì bảng todos, chúng ta sẽ thiết lập thuộc tính $table = 'my_todos' trong Model Todo như ở trên.
OK, quay trở lại với phương thức index() trong TodosController, để lấy toàn bộ todos trong database chỉ đơn giản như sau:
$todos = Todo::all();
và khai báo sử dụng class Todo ở đầu file TodosController:
use App\Todo;
và sau đó truyền toàn bộ todos này vào View 'todos.index' để hiển thị nó, chúng ta có toàn bộ code như sau:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Todo;
class TodosController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$todos = Todo::all();
return view('todos.index')->with('todos', $todos);
}
Như vậy, trong view 'todos.index' chúng ta được truyền vào danh sách todos và có thể sử dụng nó. In nó ra màn hình bằng cách Laravel Blade in các nội dung các biến, sử dụng {{ $ten_bien }}:
<!DOCTYPE html>
<html>
<head>
<title>Todos</title>
</head>
<body>
<h1>TODOS PAGE</h1>
{{ $todos }}
</body>
</html>
Chạy trang danh sách todos ở đường dẫn http://localhost:8000/todos chúng ta được kết quả như sau:
Toàn bộ danh sách todos được hiển thị ở dạng JSON, nhưng chúng ta muốn hiển thị một danh sách mà người dùng có thể đọc được dễ dàng (nội dung của file resources/views/todos/index.php):
<!DOCTYPE html>
<html>
<head>
<title>Todos</title>
</head>
<body>
<h1>TODOS PAGE</h1>
<ol>
@foreach($todos as $todo)
<li>{{ $todo->name }}</li>
@endforeach
</ol>
</body>
</html>
Ở đây, chúng ta thấy có một vòng lặp có cú pháp hơi là @foreach, đây là các câu lệnh trong Laravel Blade, bạn hãy cứ coi nó là một ngôn ngữ mới giúp cho code ngắn gọn, dễ đọc hơn. Code trên khi được template engine Laravel Blade xử lý sẽ đưa về dạng PHP như sau:
<!DOCTYPE html>
<html>
<head>
<title>Todos</title>
</head>
<body>
<h1>TODOS PAGE</h1>
<ol>
<?php
foreach($todos as $todo)
{
echo '<li>' . $todo->name . '</li>';
}
?>
</ol>
</body>
</html>
Về cơ bản là vậy, Laravel Blade giúp viết code ngắn gọn, dễ đọc, dễ phát triển và dễ bảo trì, vậy thôi! Quay lại trang danh sách todos chúng ta có được kết quả như sau:
Bạn thấy đấy, danh sách todos này đã dễ nhìn hơn rất nhiều.
Tóm lược các khái niệm trong Laravel MVC
Laravel áp dụng mô hình MVC nhưng ở một mức cao hơn, hình trên đây là một mô hình MVC cơ bản, chúng ta sẽ đưa các thành phần đã được biết đến vào mô hình này.
Các thành phần Laravel Model, View và Controller cũng có thể hiểu là các thành phần trong MVC thông thường. Tuy nhiên Laravel đã mở rộng hơn:
- Laravel Route: đấy chính là phần người dùng yêu cầu đến Controller.
- Laravel Middleware: bạn sẽ được học khái niệm này sau, là thành phần nằm giữa Route và Controller.
- Giữa Controller và Model chúng ta có Mutator, Accessor...
Tóm lại Laravel đã áp dụng kiến trúc MVC nhưng ở một cấp độ cao hơn, mà trong đó các thành phần trong MVC đó có thể là tổng hợp của một số thành phần trong Laravel. Vì vậy, có rất nhiều câu hỏi kiểu như Laravel có phải là kiến trúc MVC?
Và câu trả lời luôn là, không chính xác là như vậy, Laravel còn hơn cả MVC, nó là một kiến trúc mà bạn sẽ chưa bao giờ từng thấy. Nó là số 1 cho phát triển web.
Code: Bài 7 - Laravel MVC
CÁC BÀI VIẾT KHÁC
0 Bình luận trong "Todo List: Giới thiệu mô hình MVC trong Laravel"