it-swarm-vi.com

Sử dụng JInput ở đâu trong MVC

Tôi tò mò không biết lấy dữ liệu từ JInput trong mẫu thiết kế MVC. Ví dụ: trong trường hợp tôi cần giá trị JInput để sử dụng trong truy vấn trong phương thức lớp mô hình, tôi nên lấy giá trị JInput ở đó hay tôi nên chuyển nó từ chế độ xem hoặc không nó có vấn đề đấy?

6
doovers

Trong cấu trúc MVC phù hợp, chỉ có bộ điều khiển của bạn nên giao diện với dữ liệu yêu cầu của bạn, trong trường hợp này là JInput, và các phụ thuộc được đưa vào chế độ xem và mô hình khi được khởi tạo trong bộ điều khiển.

Với cấu trúc CMS hiện tại, cả ba phần của cấu trúc MVC thường giao thoa với dữ liệu yêu cầu. Trong các mô hình, điều này thường được thực hiện trong phương thức populateState() và các khung nhìn thường xuyên hơn trong các tệp bố cục mà chúng đang tải lên so với lớp thực tế.

11
Michael

Tôi có niềm tin mãnh liệt rằng nó nên được lấy ra khi thích hợp.

Điều đó có nghĩa là bạn phải luôn luôn sử dụng JInput nếu không, bạn đang sao chép dữ liệu và có khả năng phá vỡ KHÔ nguyên tắc.

Một lớp view nên lấy dữ liệu để điền vào các mẫu của view (/tmpl tệp) hoặc layouts từ model, không đưa giá trị vào model. Một view sau tất cả là về việc trình bày dữ liệu và giao diện người dùng không thao túng dữ liệu hoặc xử lý các hành động của người dùng.

2
Craig

JInput không cung cấp tính năng như vậy; vì vậy bạn có thể phải sử dụng $ _POST.

nếu bạn có thể có đầu vào ở dạng mảng (và sử dụng JInput :: getArray ())

hoặc là

một đối tượng được mã hóa json (bạn sử dụng json_decode (JInput :: getString ()))

http://developer.j Joomla.org/manual/chap-J Joomla_Pl platform_Manual-Input.html

http://docs.j Joomla.org/Retrieving_Vquest_data_USE_JInput

1
kumarramalingam

Tôi thường sẽ sử dụng JInput trong bộ điều khiển để định tuyến yêu cầu, sau đó chuyển yêu cầu đến mô hình thông qua một đối tượng đăng ký.

Lý tưởng nhất là bạn sẽ truyền dữ liệu yêu cầu đến bộ điều khiển từ logic bộ định tuyến của mình, để làm cho DI dễ dàng trong bộ điều khiển của bạn nhưng ... ít nhất theo cách này, các phụ thuộc yêu cầu được đưa vào mô hình và tôi không cần truy cập vào JInput để kiểm tra nó.

Khi tôi có dữ liệu trong mô hình, tôi có thể sử dụng nó để đặt trạng thái mô hình, sau đó bộ điều khiển đưa mô hình đó vào chế độ xem với tất cả dữ liệu cần thiết để thực hiện các yêu cầu dữ liệu xem đã được tải vào các thuộc tính của nó.

1
Joomsavvy

Mặc dù đã trả lời, tôi sẽ cố gắng giải thích theo quan điểm của tôi.

Joomla! là một triển khai MVC thực sự tuyệt vời và linh hoạt.

Về vấn đề của bạn về việc tạo một Chế độ xem , với dữ liệu từ Mô hình , tùy thuộc trên người dùng đã gửi dữ liệu qua $ _GET. Đây là cách tôi làm điều đó.

Điều đầu tiên tôi muốn nói là Bên cạnh các Mô hình, Khung nhìn và Bộ điều khiển chung, còn có một loại tệp khác được sử dụng rộng rãi trong Joomla!, Đó là các Bộ điều khiển mini. Yup bạn đọc nó đúng.

Đây là những tập tin trực tiếp bên trong thư mục xem.

Dưới đây là một vài trong số họ.

view.html.php
view.raw.php
view.pdf.php

Ngoài việc phục vụ mục đích tạo ra các loại đầu ra khác nhau, chúng còn phục vụ như một bộ điều khiển (Theo một cách nào đó).

Vì vậy, đối với trường hợp như của bạn, người ta không phải liên quan đến các bộ điều khiển chỉ để lấy dữ liệu từ mô hình. Tất cả những gì bạn phải làm là lấy dữ liệu đã gửi bằng cách sử dụng jinput vệ sinh nó và truyền dữ liệu dưới dạng một đối tượng hoặc mảng hoặc chỉ là biến đơn giản cho Mô hình.

Đây là một ví dụ:

view.html.php
<?php
//-- No direct access
defined('_JEXEC') || die('=;)');

class compoViewDashboard extends JViewLegacy {
    public function display($tpl = null) {
        if (JRequest::getVar('layout') == 'somelayout') {
            $jinput = JFactory::getApplication()->input;
            $data = $jinput->post->get('xyz', 'null', 'INT');

            /* If you are calling method from other(different) model you can use the following one line else you can skip it. */
            $this->setModel(JModelLegacy::getInstance('syllabus', 'compoModel'));
            $model = $this->getModel('syllabus');
            $this->courses= $model->getcourses($data);
        }
        parent::display($tpl);
    }
}

Đó là nó.

Tuyên bố miễn trừ trách nhiệm: - Hãy nhớ rằng đây là triển khai của riêng tôi và có thể không phải là cách hoàn hảo, vì vậy hãy chấp thuận điều này trước khi sử dụng bất kỳ mã nào của tôi trong môi trường sản xuất.

Lưu ý: - Tôi biết JRequest không được dùng nữa, nhưng nó vẫn ở đó theo Joomla! nhóm cốt lõi, vì cốt lõi cũng sử dụng nó ở khắp mọi nơi.

1
Mohd Abdul Mujib