it-swarm.dev

Dove usare JInput in MVC

Sono curioso di sapere da dove ottenere i dati da JInput nel modello di progettazione MVC. Ad esempio, in una situazione in cui ho bisogno di un valore JInput da utilizzare in una query in un metodo di classe di modello, dovrei ottenere lì il valore JInput o devo passarlo dalla vista o no importa?

6
doovers

In una struttura MVC appropriata, solo il controller dovrebbe si interfaccia con i dati della tua richiesta, in questo caso JInput, e le dipendenze immesse nella vista e nel modello quando vengono istanziate all'interno del controller.

Con l'attuale struttura CMS, tutte e tre le parti della struttura MVC si interfacciano spesso con i dati della richiesta. Nei modelli, ciò avviene di solito nel metodo populateState() e le viste sono più spesso nei file di layout che stanno caricando rispetto alla classe effettiva.

11
Michael

Sono fermamente convinto che dovrebbe essere recuperato dove appropriato.

Vale a dire che dovresti sempre usare JInput altrimenti stai duplicando i dati e potenzialmente rompendo i principi DRY .

Una classe view dovrebbe recuperare i dati per popolare i modelli di view (/tmpl file) o layouts da model, non iniettando valori in model. Dopotutto, un view riguarda la presentazione dei dati e l'interfaccia utente, non la manipolazione dei dati o la gestione delle azioni dell'utente.

2
Craig

JInput non offre tale funzionalità; quindi potresti dover usare $ _POST.

se puoi avere l'input in forma di array (e usa JInput :: getArray ())

o

un oggetto con codifica json (si utilizza 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

Di solito userò JInput nel controller per instradare la richiesta, quindi passerò la richiesta al modello tramite un oggetto del registro.

Idealmente, passeresti i dati della richiesta al controller dalla logica del tuo router, al fine di semplificare DI nei tuoi controller, ma ... almeno in questo modo le dipendenze della richiesta vengono iniettate nel modello e non ho bisogno di accedere a JInput per testarlo.

Una volta che ho i dati nel modello, posso usarlo per impostare lo stato del modello, quindi il controller inietta quel modello nella vista con tutti i dati necessari per soddisfare le richieste di dati della vista già caricate nelle sue proprietà.

1
Joomsavvy

Anche se ho già risposto, cercherò di spiegare nella mia prospettiva.

Joomla! è un'implementazione MVC davvero eccezionale e flessibile.

Informazioni sul problema relativo al popolamento di una vista , con i dati del modello , a seconda sull'utente ha inviato i dati tramite $ _GET. Ecco come lo faccio.

La prima cosa che vorrei affermare è che oltre ai comuni modelli, viste e controller esiste un'altra categoria di file ampiamente utilizzati in Joomla !, questi sono i mini-controller. Sì hai letto bene.

Questi sono i file direttamente all'interno della cartella di visualizzazione.

Eccone alcuni.

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

Oltre a servire allo scopo di generare diversi tipi di output, fungono anche da controller (in un certo senso).

Quindi, per casi come i tuoi, non è necessario coinvolgere i controller solo per ottenere i dati dal modello. Tutto quello che devi fare è ottenere i dati inviati usando jinput e disinfettarli e passare i dati come oggetto o array o semplicemente variabili al Modello.

Ecco un esempio:

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

Questo è tutto.

Dichiarazione di non responsabilità: - Ricorda che questa è la mia implementazione e potrebbe non essere il modo perfetto, quindi fatti approvare dai professionisti prima di utilizzare qualsiasi mio codice nell'ambiente di produzione.

Nota: - So che JRequest è deprecato, ma è lì per rimanere secondo il Joomla! core team, poiché anche il core lo utilizza ovunque.

1
Mohd Abdul Mujib