it-swarm-es.tech

Dónde usar JInput en MVC

Tengo curiosidad sobre dónde obtener datos de JInput en el patrón de diseño MVC. Por ejemplo, en una situación en la que necesito un valor JInput para usar en una consulta en un método de clase de modelo, ¿debería obtener el valor JInput allí o debería pasarlo de la vista o no? ¿importa?

6
doovers

En una estructura MVC adecuada, solo su controlador debería interfaz con sus datos de solicitud, en este caso JInput, y las dependencias inyectadas en la vista y el modelo cuando se instancia dentro del controlador.

Con la estructura CMS actual, las tres partes de la estructura MVC a menudo interactúan con los datos de la solicitud. En los modelos, esto generalmente se realiza en el método populateState() y las vistas se encuentran con mayor frecuencia en los archivos de diseño que están cargando que en la clase real.

11
Michael

Creo firmemente que debe recuperarse cuando sea apropiado.

Es decir, siempre debe usar JInput de lo contrario está duplicando datos y potencialmente rompiendo SECO principios.

Una clase view debería recuperar datos para llenar las plantillas de view (/tmpl archivos) o layouts de model, no inyectando valores en model. A view después de todo se trata de la presentación de datos y la interfaz de usuario, no la manipulación de datos o el manejo de las acciones del usuario.

2
Craig

JInput no ofrece tal característica; así que quizás tengas que usar $ _POST.

si puede hacer que la entrada esté en forma de matriz (y use JInput :: getArray ())

o

un objeto codificado con json (usa 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

Usualmente usaré JInput en el controlador para enrutar la solicitud, luego pasaré la solicitud al modelo a través de un objeto de registro.

Lo ideal sería pasar los datos de solicitud al controlador desde la lógica de su enrutador, para facilitar la DI en sus controladores, pero ... al menos de esta manera, las dependencias de solicitud se inyectan en el modelo y no necesito acceso a JInput para probarlo.

Una vez que tengo los datos en el modelo, puedo usarlos para establecer el estado del modelo, luego el controlador inyecta ese modelo en la vista con todos los datos necesarios para cumplir con los requisitos de datos de la vista ya cargados en sus propiedades.

1
Joomsavvy

Aunque ya respondió, intentaré explicar en mi perspectiva.

Joomla! es una implementación MVC realmente genial y flexible.

Sobre su problema de llenar una Vista , con datos del Modelo , dependiendo en el usuario envió datos a través de $ _GET. Así es como lo hago.

Lo primero que me gustaría decir es que Además de los Modelos, Vistas y Controladores comunes, hay otra categoría de archivos que se usa ampliamente en Joomla !, esos son los mini-Controladores. Sí, lo has leído bien.

Estos son los archivos directamente dentro de la carpeta de vista.

Éstos son algunos de ellos.

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

Además de servir el propósito de generar diferentes tipos de salida, también sirven como un controlador (de alguna manera).

Entonces, para casos como el suyo, uno no tiene que involucrar a los controladores solo para obtener los datos del modelo. Todo lo que tiene que hacer es obtener los datos enviados usando jinput, desinfectarlos y pasar los datos como un objeto o matriz o simplemente una variable simple al Modelo.

Aquí hay un ejemplo:

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

Eso es.

Descargo de responsabilidad: - Recuerda que esta es mi propia implementación, y puede que no sea la forma perfecta, así que haz que los profesionales lo aprueben antes de usar cualquiera de mis códigos en el entorno de producción.

Nota: - Sé que JRequest está en desuso, pero está ahí para quedarse según Joomla! equipo central, ya que el núcleo también lo usa por todas partes.

1
Mohd Abdul Mujib