3

如何正确地将模型数据从 joomla 3.1 中的控制器传递到视图。开始时,我初始化我的一个子控制器方法来收集项目的数据,这些数据应该填满我的表单布局。使用以下 url 访问,而?option=com_unis&task=unis.edit&layout=edit&id=1不是我的控制器方法看起来像

public function edit() 
{
    $input = JFactory::getApplication()->input;     
    $model = $this->getModel ( 'item'); 
    $view = $this->getView('item', 'html');   
    $view->setModel($model);
    $view->setLayout('edit');

// Display the view
$view->display();

return $this;
}

如果我尝试在我的视图中访问模型返回 null

找到了!但也许不是最好的解决方法

在视图中我初始化我的模型

$model = $this->getModel('mymodel');
$data  = $model->my_method($args);

而不是将布局与公共变量相关联

$this->data = $data;
4

2 回答 2

1

毕竟我找到了解决方法。在视图中,我将模型称为如下

$model = $this->getModel('mymodel');
$data  = $model->my_method($args);

比我创建了一个保存布局数据的公共变量

$this->data = $data;
于 2013-06-09T16:36:23.843 回答
1

控制器选择要使用的视图。模型函数可以在 views/somefolder/view.html.php 中调用,assignes 变量可以在模板默认文件中查看。

类 MyPageViewMyPage 扩展 JViewLegacy {

/**
 * Display the Hello World view
 *
 * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
 *
 * @return  void
 */

public $data;

function display($tpl = null) {
    // Assign data to the view
    $this->msg = $this->get('Msg'); // call a method msg in the model defined

    $model = $this->getModel(); // creating an object for the model

    $this->data = $model->getFilter(1); // call a method defined in model by passing the arguments
    // Check for errors.
    if (count($errors = $this->get('Errors'))) {
        JLog::add(implode('<br />', $errors), JLog::WARNING, 'jerror');

        return false;
    }
    // Display the view                
    parent::display($tpl);
}

}

在默认模板文件中

echo $this->msg;

print_r($this->data);
于 2015-04-02T10:24:21.480 回答