18. $model = new SumModel($x, $y);
19. $model->solve();
20. $ret = $model->getSum(); //Kết quả xử lý nghiệp vụ
21.
22. // 3. Gọi view để tạo nội dung 23. $view = new SumView($x, $y, $ret); 23. $view = new SumView($x, $y, $ret);
24. $html = $view->render(); 25. 25. 26. // 4. Trả lời trình khách 27. echo $html; 28. } else { 29. echo "Nhập x, y là các số. Ví dụ ?x=3&y=-4"; 30. } 31. } 32. }
Thành phần điều khiển đƣợc cài đặt bằng một lớp với các phƣơng thức thực hiện chức năng điều phối, nhƣ phƣơng thức proc() trong ví dụ này. Mỗi phƣơng thức thực hiện điều phối của thành phần điều khiển còn đƣợc gọi là một hành động
(action). Hành động điều phối thực hiện kiểm tra dữ liệu vào, chuyển dữ liệu vào cho thành phần mơ hình, nhận kết quả xử lý từ thành phần mơ hình rồi chuyển cho thành phần giao diện, nhận nội dung web từ thành phần giao diện rồi gửi cho trình khách. Ngồi ra, hành động điều phối cũng phải đảm nhận một số bƣớc xử
WebAppDevLê Đình Thanh, Nguyễn Việt Anh
142 lý khác để thực hiện các nhiệm vụ còn lại bên phục vụ (các Mục 6.1.3, 6.1.4, 6.1.5). Những nhiệm vụ này sẽ đƣợc trình bày trong những chƣơng riêng sau chƣơng
này.
Cuối cùng, trang index.php, khai thác các thành phần kể trên, có nội dung nhƣ
sau:
1. <?php
2. require_once("control.php");
3. $ctrl = new SumControl();
4. $ctrl->proc();
Đối tƣợng điều khiển đƣợc khai báo và hành động của nó đƣợc gọi để bắt đầu
thực thi chuỗi xử lý với sự tham gia của cả các thành phần mơ hình và giao diện ở phía sau.
6.5. GIAO DIỆN CẤU PHẦN
Trong thiết kế MVC, thành phần giao diện có thể trả về một trang web đầy đủ, nhƣ trang view.php ở ví dụ trƣớc, nhƣng cũng có thể chỉ trả về một đoạn nội dung cấu phần của trang web mà thôi. Việc trả về các đoạn cấu phần trang web có ƣu điểm, so với trả về cả trang đầy đủ, là khả năng tích hợp cấu phần trang web vào
bất kỳ vị trí nào ở trang bất kỳ.
Xét ví dụ thành phần giao diện MVC trả về cấu phần trang web nhƣ sau. Dự án sum ở Mục 6.4 sẽ đƣợc thay đổi nội dung các tệp view.php và index.php. Trong tệp view.php, phƣơng thức render() của lớp SumView không trả về cả trang web nữa mà chỉ trả về một đối tƣợng <div> chứa nội dung cần hiển thị. Mã nguồn tệp view.php đƣợc sửa đổi nhƣ sau:
1. <?php
2. // view.php: Trình diễn kết quả tính tổng hai số
3. class SumView {
4. private $x;
5. private $y;