如何将多个对象传递给模板?

时间:2018-04-05 13:02:29

标签: php templates

我试图通过使用OOP来理解MVC方法。然而,我似乎已经碰壁了。

我正在尝试将多个对象传递给视图。但到目前为止我能做的只是通过一个对象。理想的结果是传递多个对象,同时保留在控制器中分配给它们的名称。

View类中的render,start和end函数如下所示:

public function render($viewName, $data){
    $viewAry = explode('/', $viewName);
    $viewString = implode(DS, $viewAry);
    if(file_exists(ROOT . DS . 'app' . DS .  'views' . DS . $viewString . '.php')){
        include(ROOT . DS . 'app' . DS .  'views' . DS . $viewString . '.php');
        include(ROOT . DS . 'app' . DS . 'views' . DS . 'layouts' . DS . $this->_layout . '.php');
    }else{
        die('The view \"' . $viewName . '\" does not exist.');
    }
}

public function content($type){
    if($type == 'head'){
        return $this->_head;
    }elseif ($type == 'body'){
        return $this->_body;
    }
    return false;
}

public function start($type){
    $this->_outputBuffer = $type;
    ob_start();
}

public function end(){
    if($this->_outputBuffer == 'head'){
        $this->_head = ob_get_clean();
    }elseif($this->_outputBuffer == 'body'){
        $this->_body = ob_get_clean();
    }else{
        die('You must first run the start method.');
    }
}

这就是控制器的样子:

public function indexAction(){
    $items =  $this->PortalModel->getItems();
    $collections =  $this->PortalModel->getCollections();

    $this->view->render('home/index', $items);
}

所以这就是我将一个$ data对象放到视图中并循环它的方法。 但是,如何将数据库中的多个结果存储到视图中?

1 个答案:

答案 0 :(得分:1)

您应该将一组变量传递给视图而不是一个变量。

public function indexAction(){
    $variables = [
        'items' => $this->PortalModel->getItems(),
        'collections' => $this->PortalModel->getCollections()
    ];

    $this->view->render('home/index', $variables);
}