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

时间:2012-02-25 18:19:50

标签: php codeigniter view controller

我想将$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>

12 个答案:

答案 0 :(得分: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 :(得分:14)

简单来说,

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

e.g。

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

view:
echo $hello;

答案 2 :(得分:6)

视图不会调用数据'数据'

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

您在视图中echoecho $stuff;而非echo $data;

我是一个低级代码小提琴手,但我真的很喜欢CodeIgniter,请原谅我,如果我有这个关于山雀的屁股。

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

答案 3 :(得分:3)

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

希望这对您有帮助

答案 4 :(得分:2)

你可以这样做

控制器

中定义了数组
$data['hello'] = "hello";

并将变量传递给查看

echo $hello; 

答案 5 :(得分:1)

在您的控制器中,您可以传递

''

在您看来,您可以致电

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

答案 6 :(得分: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;
 }
}

现在,如果你有一个以上的身份说出民意调查名称,你可以添加数组。    现在在控制器中执行

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 put

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

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

答案 7 :(得分: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

答案 8 :(得分: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 ]);

}

在View Side您只需检索该数据: 要显示您只需使用echoprintprint_r即可。如果你想循环它,你也可以这样做。

答案 9 :(得分: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;
从控制器到视图的

$ data

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

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

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

答案 10 :(得分:0)

代替

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

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

在您的控制器文件中,控制器会将具有 hello 作为 string 数据发送到results_view,在您的视图文件中,您可以通过< / p>

echo $hello;

答案 11 :(得分:0)

如果通过

$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;?>

希望这对您有所帮助。