Где использовать JInput в MVC

Мне любопытно, где получить данные из JInput в шаблоне проектирования MVC. Например, в ситуации, когда мне нужно значение JInput, которое будет использоваться в запросе в методе класса модели, должен ли я получить значение JInput или мне нужно передать его из взгляд или это имеет значение?

6 голосов | спросил doovers 30 AMpWed, 30 Apr 2014 03:46:31 +040046Wednesday 2014, 03:46:31

5 ответов


11

В правильной структуре MVC только ваш контроллер должен взаимодействовать с вашими данными запроса, в этом случае JInput и зависимостями, введенными в представление и модель при создании экземпляров внутри контроллер.

В текущей структуре CMS все три части структуры MVC часто взаимодействуют с данными запроса. В моделях это обычно делается в методе populateState(), а представления чаще всего находятся в файлах макета, которые они загружают, чем в самом классе.

ответил Michael 30 AMpWed, 30 Apr 2014 09:23:37 +040023Wednesday 2014, 09:23:37
2

Я твердо убежден, что его следует искать там, где это необходимо.

То есть вы всегда должны использовать JInput, иначе вы дублируете данные и, возможно, нарушаете DRY .

Класс view должен извлекать данные для заполнения шаблонов view (/tmpl) или layouts из model, не вводя значения в модель model. A view в конце концов касается представления данных и пользовательского интерфейса, а не манипулирования данными или обработки действий пользователя.

ответил Craig 30 AMpWed, 30 Apr 2014 04:51:13 +040051Wednesday 2014, 04:51:13
1

JInput не предлагает такую ​​функцию; поэтому вам придется использовать $ _POST.

, если вы можете иметь вход в форме массива (и использовать JInput :: getArray ())

или

json-encoded object (вы используете json_decode (JInput :: getString ()))

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

http://docs.joomla.org/Retrieving_request_data_using_JInput

ответил kumarramalingam 1 Maypm14 2014, 18:24:43
1

Хотя я уже ответил, я постараюсь объяснить в моей перспективе.

Joomla! это действительно отличная и гибкая реализация MVC.

О вашей проблеме заполнения Просмотр , с данными из Model , в зависимости от представленных пользователем данных через $ _GET. Вот как я это делаю.

Прежде всего хочу сказать, что помимо общих моделей, представлений и контроллеров есть еще одна категория файлов, широко используемых в Joomla !, это мини-контроллеры. Вы читаете это правильно.

Это файлы непосредственно внутри папки просмотра.

Вот несколько из них.

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

Помимо обслуживания цели генерации различных типов вывода, они также служат в качестве контроллера (в некотором роде).

Итак, для случая, такого как ваш, вам не нужно привлекать контроллеры только для получения данных из модели. Все, что вам нужно сделать, это получить представленные данные с помощью jinput, дезинфицировать его и передать данные в виде объекта или массива или просто простой переменной в Model.

Вот пример:

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

Вот оно.

Отказ от ответственности: - Помните, что это моя собственная реализация, и, возможно, это не идеальный способ, поэтому ознакомьтесь с этим профи, прежде чем использовать какой-либо из моего кода в рабочей среде.

Примечание: - Я знаю, что JRequest устарел, но его там осталось, как в Joomla! так как ядро ​​тоже использует его повсюду.

ответил 9KSoft 1 62014vEurope/Moscow11bEurope/MoscowSat, 01 Nov 2014 02:05:36 +0300 2014, 02:05:36
1

Я обычно использую JInput в контроллере для маршрутизации запроса, а затем передаю запрос модели через объект реестра.

В идеале вы должны передавать данные запроса контроллеру из своей логики маршрутизатора, чтобы сделать DI простым в ваших контроллерах, но ... по крайней мере, таким образом, чтобы зависимые запросы были введены в модель, и я не для проверки его необходимо получить доступ к JInput.

Как только у меня есть данные в модели, я могу использовать его для установки состояния модели, затем контроллер вводит эту модель в представление со всеми данными, необходимыми для выполнения требований к данным просмотра, уже загруженных в его свойства.

ответил Joomsavvy 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 05 Sep 2015 18:17:41 +0300 2015, 18:17:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132