Tôi tham khảo đoạn mã dưới đây, được trình bày trong Phát triển thành phần MVC - Ví dụ về chức năng giao diện người dùng :
class HelloWorldViewUpdHelloWorld extends JView
{
// Overwriting JView display method
function display($tpl = null)
{
$app = JFactory::getApplication();
$params = $app->getParams();
$dispatcher = JDispatcher::getInstance();
// Get some data from the models
$state = $this->get('State');
$item = $this->get('Item'); //WHAT IS THE PURPOSE OF THIS STATEMENT?
$this->form = $this->get('Form');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Display the view
parent::display($tpl);
}
}
Tôi không hiểu mục đích của tuyên bố này và tôi cũng nhận thấy rằng $item
không xuất hiện trong mã trong tệp site/views/updhelloworld/tmpl/default.php
trên trang web đó.
Tôi thực sự có cùng một câu hỏi cho view.html.php
tệp của com_users/views/registration
của mã Joomla 3 (Tôi nghĩ bằng cách so sánh hai ví dụ gửi mẫu tôi có thể trả lời câu hỏi của mình):
$this->data = $this->get('Data'); //WHAT IS THE PURPOSE OF THIS STATEMENT? WHAT PRECISELY KIND OF DATA iS MEANT HERE?
$this->form = $this->get('Form');
$this->state = $this->get('State');
$this->params = $this->state->get('params');
Và cũng ở đây $this->data
không xuất hiện trong phần liên quan tmpl/default.php
tệp (?)
Trong các lớp mở rộng JView
hoặc JViewLegacy
, một lệnh gọi đến $this->get()
sẽ gọi một hàm trong các lớp mô hình đã đăng ký bắt đầu bằng get. Vì vậy, việc gọi $this->get('Item')
sẽ gọi phương thức getItem của mô hình.
$this->get('Item')
gọi hàm getItem()
trong mô hình và sau đó nó tải dữ liệu từ cơ sở dữ liệu.
$this->get('Data')
gọi một phương thức trong mô hình lấy dữ liệu biểu mẫu đăng ký và chuẩn bị sử dụng.
Hãy xem getData
in com_users/models/registration.php