将Ci控制器传递给视图

时间:2011-12-23 20:45:48

标签: php codeigniter scope

如何在视图中调用控制器?当我使用下面的代码时,我受限于Html和CSS格式。我可以使用jQuery JSON,但这是增加的工作。有什么想法吗?

<?php
class home extends CI_Controller {
    function __construct() {
        parent::__construct();
    }
    function displayList() {
        $query = $this->db->query("SELECT * FROM data");
        foreach ($query->result() as $row) {
            echo $row->title . "<br>";
            echo $row->text;
        }
    }
    function index() {
        $this->load->view('home');
        $data['lists'] = $this->displayList();
    }
}
?>

3 个答案:

答案 0 :(得分:4)

您不在视图中调用控制器。您将数据从控制器传递到视图。

像这样:

function index() {
    $data = array();
    $data['lists'] = $this->displayList();
    $this->load->view('home', $data);
}

现在,在home视图中,$lists将是displayList()的值。

此外,displayList echo输出数据,而不是返回数据,因此$data['lists']将为空。您应该return字符串,因此视图可以echo

function displayList() {
    $str = ''
    $query = $this->db->query("SELECT * FROM data");
    foreach ($query->result() as $row) {
        $str .= $row->title . "<br>" . $row->text;
    }
    return $str;
}

P.S。我通常将数据库查询放入模型中,让控制器调用它们。

答案 1 :(得分:2)

您将向load->view

发送您想要的第二个参数的数组
$data['lists'] = $this->displayList();
$this->load->view('home',$data);

现在,您可以使用$lists在视图中访问它。

答案 2 :(得分:1)

我认为你要做的就是这个......

<?php
class home extends CI_Controller {
    function __construct() {
        parent::__construct();
    }

    function displayList() {
        $query = $this->db->query("SELECT * FROM data");
        foreach ($query->result() as $row) {
            echo $row->title . "<br>";
            echo $row->text;
        }
    }

    function index() {
        $data = array();
        $data['lists'] = $this->displayList();
        $this->load->view('home',$data);
    }
}

?>

然后您可以在视图中使用$lists来访问该数据