Codeigniter:将数据从控制器传递到视图

问题描述 投票:30回答:13

我想将$data从名为poll的控制器传递给results_view但是我得到一个未定义的变量错误。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Poll extends CI_Controller {

    public function __construct()
       {
            parent::__construct();
            $this->load->database();
            $this->load->helper('form');
       }

    public function index()
    {

        $this->load->view('poll_view',$data);
    }

    public function vote()
    {
        echo "Voting Successfull";
        $this->db->insert('votes',$_POST);
    }

    public function results()
    {
        echo "These are the results";
        //$query = $this->db->get('votes');
        $data = "hello";
        $this->load->view('results_view', $data);

    }
}

Results_view.php

<html>
<?php echo $data; ?>
</html>
php codeigniter view controller
13个回答
43
投票

$data应该是一个数组或对象:http://codeigniter.com/user_guide/general/views.html

$data = array(
    'title' => 'My Title',
    'heading' => 'My Heading',
    'message' => 'My Message'
);

$this->load->view('results_view', $data);

results_view.php

<html>
<?php 
//Access them like so
echo $title.$heading.$message; ?>
</html>

1
投票

如果你通过

$data = your code
$this->load->view('your-page', $data);

并将您的视图数据作为

<?php echo $data;?>

它不会起作用,因为ci不理解这个模式。如果想传递值表单控制器来查看,那么你可以尝试这个 -

控制器 -

$data['any-name'] = your values;
$this->load->view('your-page', $data);

然后在您的视图中,您可以通过 - 获取此数据 -

<?php echo $any-name;?>

希望这对你有所帮助。


0
投票

我已经看到了上述所有答案,所以当我必须将控制器中的数据加载到我的视图时,这就是我所做的。将数据传递到控制器的视图:

public function your_controller(){

   // Your Necessary Code 
   // You have the $data, $data2, $data3 to post to the view.

   $this->load->view('your_view_directory or view_page',['data'=>$data, 'data2'=>$data2, 'data3'=>$data3... so on ]);

}

在视图侧您可以简单地检索该数据:显示您可以简单地使用echoprintprint_r。如果你想循环它,你也可以这样做。


0
投票

在控制器中:

公共功能产品(){

$data = array("title" => "Books", "status"=>"Read","author":"arshad","company":"3esofttech",

“主题”:“计算机科学”);

数据从模型到控制器

$this->load->model('bookModel');
$result = $this->bookModel->getMoreDetailsOfBook();

**Add *$result* from model to *$data* array**  
$data['tableRows'] = $result;

从Controller到View的$ data

$this->load->view('admin/head',$data);

并在视图文件视图/ user.php中访问

<?php  echo $data;
 foreach($tableRows as $row){ echo
 $row['startData']; } ?>

0
投票

代替

$data = "hello";
$this->load->view('results_view', $data);

$data['hello'] = 'hello';
$this->load->view('results_view', $data);

在您的控制器文件和控制器中,将具有hello字符串的数据发送到results_view,在您的视图文件中,您只需访问

echo $hello;

14
投票

简单来说,

控制器中的$ data ['a']在您的视图中变为$ a。 (您的视图中不会存在$ data,只有索引可用)

EG

Controller:    
$data['hello']='hellow world';

view:
echo $hello;

6
投票

该视图不会调用数据“数据”

控制器将包括一个关联索引(不确定这是否是正确的命名法),因为数据,例如'stuff',因此$data['stuff']

你在视图中的echo如此:echo $stuff; not echo $data;

我是一个v low low code fiddler但是真的很喜欢CodeIgniter所以请原谅我,如果我有这个关于山雀的屁股。

还有一件事 - 肯定你的构造函数有点浪费。所有加载库和助手都是使用自动加载文件完成的。


6
投票

你只需要创建一个数组,你使用codeigniter吗?

控制器上的示例:

$data['hello'] = "Hello, world";
$this->load->view('results_view', $data);

在de page“results_view”中,您只需:

<?php echo $hello;?>

Obs:您可以创建n个数据,只需注意名称并使其成为一个数组。

Obs²:要使用数据,请使用带回波的数组键。


3
投票

你可以创建属性$data = [];在CI_Controller内部(路径:system / core / Controller.php)并存储要在视图中显示的所有数据。你可以在CI_Controller中加载语言,菜单等常用数据。您也可以为控制器中的视图添加特殊数据。 (例如:$this->data['message'] = "Hello world";)最后,你可以通过$this->data来查看加载视图(例如:$this->load->view('view_name',$this->data);

我希望这能帮到您


2
投票

你可以这样做

控制器中定义的数组

$data['hello'] = "hello";

并传递变量来查看

echo $hello; 

1
投票

在您的控制器中,您可以通过

$data['poll'] = "Your results";

在您的视图中,您可以致电

echo $poll; 

1
投票

在控制器中:

$data["result"] = $this->login_model->get_login(); // Get array value from DB..

$this->load->view('login-form',$data); // Pass the array to view 

在视图中:

print_r($result);  // print the array in view file

1
投票

好的,我终于解决了。你应该有一个模型(它有很多帮助)

在你的模型中做类似的事情

模型

class poll_model extends CI_MODEL {

 function __construct() {
   $this-load->database(); 
 }

 function get_poll {
   $this->db->query("SELECT * FROM table");
   $row = $query->row();

   $obj = array(
    'id' => $row->id
  );
   return $obj;
 }
}

现在,如果你有一个以上的id说poll#的名字,你可以添加数组。现在在你的控制器做

class Poll extends CI_Controller {

public function __construct()
   {
        parent::__construct();
        $this->load->database();
        $this->load->helper('form');
        $this->load->model('poll_model');
   }

public function index()
{
    $data["a"] = $this->poll_model->get_poll();
    $this->load->view('poll_view',$data);
}

最后在VIEW中

<? echo $a["id"]; ?>

这是一个很大的帮助。我通过测试得出结论,它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.