it-swarm-id.com

Tempat menggunakan JInput di MVC

Saya ingin tahu ke mana mendapatkan data dari JInput dalam pola desain MVC. Misalnya, dalam situasi di mana saya memerlukan nilai JInput untuk digunakan dalam kueri dalam metode kelas model, haruskah saya mendapatkan nilai JInput di sana atau haruskah saya meneruskannya dari tampilan atau tidak itu penting?

6
doovers

Dalam struktur MVC yang tepat, hanya controller Anda harus antarmuka dengan data permintaan Anda, dalam hal ini JInput, dan dependensi disuntikkan ke tampilan dan model ketika instantiated dalam controller.

Dengan struktur CMS saat ini, ketiga bagian struktur MVC sering berinteraksi dengan data permintaan. Dalam model, ini biasanya dilakukan dalam metode populateState() dan tampilan lebih sering di file tata letak yang mereka muat daripada kelas sebenarnya.

11
Michael

Saya memiliki keyakinan kuat bahwa itu harus diambil jika perlu.

Artinya Anda harus selalu menggunakan JInput kalau tidak Anda menduplikasi data dan berpotensi melanggar DRY prinsip.

Kelas view harus mengambil data untuk mengisi templat view (/tmpl file) atau layouts dari model, tidak menyuntikkan nilai ke dalam model. A view setelah semua adalah tentang penyajian data dan UI bukan manipulasi data atau penanganan tindakan pengguna.

2
Craig

JInput tidak menawarkan fitur tersebut; jadi Anda mungkin harus menggunakan $ _POST.

jika Anda dapat meminta input dalam bentuk array (dan gunakan JInput :: getArray ())

atau

objek json-encoded (Anda menggunakan json_decode (JInput :: getString ()))

http://developer.joomla.org/manual/chap-Joomla_Platform_Manual-Input.html

http://docs.joomla.org/Retrieving_request_data_using_JInput

1
kumarramalingam

Saya biasanya akan menggunakan JInput di controller untuk merutekan permintaan, kemudian meneruskan permintaan ke model melalui objek registri.

Idealnya Anda akan meneruskan data permintaan ke controller dari logika router Anda, untuk membuat DI mudah di controller Anda tapi ... setidaknya dengan cara ini dependensi permintaan disuntikkan ke dalam model dan saya tidak perlu akses ke JInput untuk mengujinya.

Setelah saya memiliki data dalam model, saya dapat menggunakannya untuk mengatur keadaan model, kemudian controller menyuntikkan model itu ke dalam tampilan dengan semua data yang diperlukan untuk memenuhi data yang dilihat, reqs yang sudah dimuat ke dalam propertinya.

1
Joomsavvy

Meskipun sudah dijawab, saya akan mencoba menjelaskan dalam perspektif saya.

Joomla! adalah Implementasi MVC yang benar-benar hebat dan fleksibel.

Tentang masalah Anda dalam mengisi Tampilan , dengan data dari Model , tergantung pada data yang dikirimkan pengguna melalui $ _GET. Inilah cara saya melakukannya.

Hal pertama yang saya ingin nyatakan adalah bahwa Selain Model umum, Tampilan dan Pengendali ada kategori lain dari file yang digunakan secara luas di Joomla !, yaitu mini-Controllers. Ya, Anda membacanya dengan benar.

Ini adalah file langsung di dalam folder tampilan.

Ini beberapa di antaranya.

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

Selain melayani tujuan menghasilkan berbagai jenis output, mereka juga berfungsi sebagai pengontrol (sedikit banyak).

Jadi untuk kasus seperti milik Anda, orang tidak harus melibatkan pengontrol hanya untuk mendapatkan data dari model. Yang harus Anda lakukan adalah mendapatkan data yang dikirim menggunakan sanitize jinput dan mengirimkan data sebagai objek atau array atau hanya variabel biasa, ke Model.

Inilah sebuah contoh:

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);
    }
}

Itu dia.

Penafian: - Ingatlah bahwa ini adalah implementasi saya sendiri, dan mungkin bukan cara yang sempurna, jadi dapatkan ini disetujui oleh pro sebelum menggunakan salah satu kode saya di lingkungan produksi.

Catatan: - Saya tahu JRequest sudah tidak digunakan lagi, tetapi masih ada untuk tetap sesuai Joomla! tim inti, karena inti juga menggunakannya di semua tempat.

1
Mohd Abdul Mujib