如何从Joomla子控制器传递数据到视图?

时间:2013-08-09 10:29:42

标签: php joomla scope variable-assignment

我见过很多例子可以将数据从Joomla控制器传递给视图(例如here)。但我需要将Joomla子控制器传递给特定的视图文件(view.html.php)。我搜索了一整天并没有找到解决方案。有谁知道怎么做?

1 个答案:

答案 0 :(得分:4)

Joomla MVC非常松散,您可以通过多种方式实现此行为。 我认为这是在Joomla中实现MVC最标准的序列:

  1. 控制器读取输入并在会话变量中设置相关参数
  2. 控制器重定向到视图
  3. 视图加载模型
  4. 该模型从会话中读取参数。
  5. 但是你可以处理3中的参数并将它们传递给模型;这真的是风格/品味的问题。由于Joomla允许您使用$ this-> get('Data')从视图中调用模型,因此没有传递params的空间;但是你可以选择调用$ model-> getData2($ param1,$ param2)。

    基本电话是:

    JApplication::getUserStateFromRequest()
    

    在单个调用中读取输入并返回先前保存的会话数据;

    setUserState 在会话中保留此信息 getUserState 将在模型中用于检索数据。

    然而,您可以简单地重定向传递网址中的参数;然后使用view.html.php解析输入并在调用方法($ model-> setState)之前设置模型的内部状态,或者完全避免重定向并从控制器加载模型和视图(这似乎更多MVC的标准和简单方法,但在Joomla中很少见。)

    直接从控制器调用视图

        $vName      = 'yourview';
        $vFormat    = 'html'; // raw
    
        if ($view = $this->getView($vName, $vFormat)) {
            $model = $this->getModel($vName);
            $model->setState('filter.type', $type);
            $view->setModel($model, true);
    
            // Push document object into the view.
            $view->assignRef('document', $document);
    
            $view->display();
        }