it-swarm-tr.com

MVC'de JInput nerede kullanılır

MVC tasarım modelinde JInput 'den nereden veri alacağımı merak ediyorum. Örneğin, bir model sınıfı yönteminde bir sorguda kullanmak için JInput değerine ihtiyaç duyduğum bir durumda, JInput değerini orada almalı mıyım yoksa görünümden mi geçirmeliyim yoksa önemli mi?

6
doovers

Uygun bir MVC yapısında, sadece denetleyiciniz gerekir istek verilerinizle arayüz oluşturur, bu durumda JInput ve denetleyici içinde somutlaştırıldığında görünüme ve modele enjekte edilen bağımlılıklar.

Mevcut CMS yapısı ile, MVC yapısının her üç parçası da genellikle talep verileriyle bağlantı halindedir. Modellerde, bu genellikle populateState() yönteminde yapılır ve görünümler yüklendikleri mizanpaj dosyalarında daha çok gerçek sınıfa göre yapılır.

11
Michael

Uygun olduğu durumlarda geri alınması gerektiğine inanıyorum.

Yani her zaman JInput kullanmalısınız, aksi takdirde verileri çoğaltıyorsunuz ve potansiyel olarak KURU ilkelerini ihlal ediyorsunuz.

view sınıfı, view öğesinden layouts şablonlarını (/tmpl Dosyaları) veya model öğesini doldurmak için veri alıyor olmalıdır, model içine değer enjekte etmiyor. Her şeyden önce bir view verinin sunumu ve kullanıcı arayüzünün verilerin manipülasyonu veya kullanıcı işlemlerinin gerçekleştirilmemesi ile ilgilidir.

2
Craig

JInput böyle bir özellik sunmaz; bu yüzden $ _POST kullanmanız gerekebilir.

girdinin dizi biçiminde olmasını sağlayabilirseniz (ve JInput :: getArray () kullanın)

veya

json kodlu bir nesne (json_decode kullanırsınız (JInput :: getString ()))

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

http://docs.joomla.org/Retrieving_request_data_using_JInput

1
kumarramalingam

Genellikle isteği yönlendirmek için denetleyicide JInput kullanacağım, daha sonra isteği bir kayıt defteri nesnesi aracılığıyla modele geçireceğim.

İdeal olarak, DI'yi kontrol cihazlarınızda kolaylaştırmak için istek verilerini kontrolöre yönlendirirsiniz, ancak ... en azından bu şekilde istek bağımlılıkları modele enjekte edilir ve erişime ihtiyacım yok J Test etmek için giriş yapın.

Modeldeki verileri aldıktan sonra, model durumunu ayarlamak için kullanabilirim, daha sonra denetleyici, özellikleri önceden yüklenmiş olan görünüm verisi gereksinimlerini yerine getirmek için gerekli tüm verilerle bu modeli görünüme enjekte eder.

1
Joomsavvy

Zaten cevaplanmış olmasına rağmen, perspektifimde açıklamaya çalışacağım.

Joomla! gerçekten harika ve esnek bir MVC uygulamasıdır.

Görünümü , Modelinden gelen verilerle doldurma sorununuz hakkında kullanıcıya $ _GET aracılığıyla veri gönderdi. İşte böyle yapıyorum.

Belirtmek istediğim ilk şey, ortak Modeller, Görüşler ve Kontrolörlerin yanı sıra, Joomla! 'Da yaygın olarak kullanılan başka bir dosya kategorisi var; bunlar Mini Kontrolörler. Evet, doğru okudun.

Bunlar doğrudan görünüm klasörünün içindeki dosyalardır.

İşte bunlardan birkaçı.

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

Farklı çıktı türleri üretme amacına hizmet etmenin yanı sıra, kontrolör olarak da hizmet ederler (Bir şekilde).

Yani sizinki gibi bir durumda, sadece modelden veri almak için denetleyicileri dahil etmek gerekmez. Tek yapmanız gereken jinput kullanarak gönderilen verileri almak ve verileri bir nesne veya dizi veya sadece düz değişken olarak Model'e aktarmaktır.

Heres bir örnek:

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

Bu kadar.

Feragatname: - Bunun kendi uygulamam olduğunu ve mükemmel bir yol olamayabileceğini unutmayın, bu nedenle kodumu üretim ortamında kullanmadan önce bunu profesyoneller tarafından onaylayın.

Not: - JRequest'in kullanımdan kaldırıldığını biliyorum, ama Joomla! çekirdek takım, çünkü çekirdek de her yerde kullanıyor.

1
Mohd Abdul Mujib