【问题标题】:Passing a Ci controller to a view将 Ci 控制器传递给视图
【发布时间】:2012-01-27 01:46:40
【问题描述】:

如何在视图中调用控制器?当我使用下面的代码时,我受限于 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();
    }
}
?>

【问题讨论】:

  • 你应该从控制器调用视图,而不是相反。

标签: php codeigniter scope


【解决方案1】:

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

像这样:

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;
}

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

【讨论】:

  • 我将数组数据传递给视图。但它似乎仍然在屏幕顶部回显,这意味着它没有正确传递 displayList() ......我无法让 =$lists?> 在视图内工作。它没有在我的 div 中显示任何内容。有什么想法吗?
  • 您是否将displayList 更改为return 而不是echo 获取数据?
  • 没问题,很高兴我能帮上忙。
  • . 是 PHP 中的 concatenation 运算符。 .= 是 $a = $a.$str 的简写。你可以改用$a .= $str。
【解决方案2】:

你将发送一个你想要的东西的数组作为第二个参数到load-&gt;view

$data['lists'] = $this->displayList();
$this->load->view('home',$data);

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

【讨论】:

    【解决方案3】:

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

    <?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 来访问该数据

    【讨论】:

    • 哦,是的,我忘了在视图中使用变量。谢谢老兄。
    猜你喜欢
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多