【问题标题】:How to pass data from Joomla sub controller to view?如何将数据从 Joomla 子控制器传递给查看?
【发布时间】:2013-08-11 06:24:15
【问题描述】:

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

【问题讨论】:

  • 为什么不能使用子控制器来渲染视图?子控制器应该有它所有的父行为
  • 没有机器,如果我只需要渲染视图,我可以使用 $this->setRedirect(JRoute::_('path to my view'));。但我找不到一种方法来传递一些数据并在视图中访问它们
  • 当你说 sub-controller 你说的是 Extends JController 对吗?
  • 是的,它的祖父是 Jcontroller,我无能为力

标签: php joomla scope variable-assignment


【解决方案1】:

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

  1. 控制器读取输入并在会话变量中设置相关参数
  2. 控制器重定向到视图
  3. 视图加载模型
  4. 模型从会话中读取参数。

但是您可以处理 3. 中的参数并将它们传递给模型;这真的是风格/品味的问题。由于 Joomla 允许您使用 $this->get('Data') 从视图中调用模型,因此没有传递参数的空间;但是,您可以选择调用 $model->getData2($param1,$param2)。

基本调用是:

JApplication::getUserStateFromRequest()

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

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

但是,您可以简单地重定向传递 url 中的参数;然后使用 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();
    }

【讨论】:

  • 我正在以 $model->getData2($param1,$param2) 方式与模型通信。我的问题是沟通视图和控制器。我认为应该有一种方法可以在没有会话的情况下做到这一点。
  • 你可以 setRedirect(JRoute::_('index.php?option=...&param1=something&param2=somethingelse; 或者你可以从控制器手动实例化视图并调用它的 render()方法。
  • 是的,这些都很好。谢谢。但我还是希望能有像所有其他框架一样的功能。
  • 请检查我更新的答案,我放了一个如何直接从控制器调用视图的示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 2013-10-05
  • 1970-01-01
相关资源
最近更新 更多