【问题标题】:Codeigniter: Passing data from controller to viewCodeigniter:将数据从控制器传递到视图
【发布时间】:2012-02-25 18:19:50
【问题描述】:

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

【问题讨论】:

  • $data 应该是数组而不是变量

标签: php codeigniter view controller


【解决方案1】:

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

【讨论】:

  • 我已经阅读了关于如何将数据从控制器传递到 CodeIgniter 中查看的文章cloudways.com/blog/how-to-pass-data-in-codeigniter
  • @Lawrence 我尝试了您的代码,该代码在单击后但之前有效
  • @NarendraVerma 您可能在某处使用了 $_GET 参数,并且在使用前没有检查其设置。
【解决方案2】:

简单来说,

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

例如

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

view:
echo $hello;

【讨论】:

  • 是的,你说得对。 $data 不直接存在于视图中。在视图上传递值的最佳方法是 $data['hello']
【解决方案3】:

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

控制器示例:

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

在页面“results_view”中,您只需:

<?php echo $hello;?>

Obs:可以创建n条数据,注意名字,做成数组即可。

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

【讨论】:

  • 我尝试了您的代码,该代码在单击后但之前有效如果我刷新页面,我得到未定义的变量:你好。有什么帮助吗?
【解决方案4】:

视图不会将数据称为“数据”

控制器将包含一个关联索引(不确定这是否是正确的命名法)用于数据,例如“stuff”,看起来像 $data['stuff']

你会在视图中echo,所以:echo $stuff; 不是 echo $data;

我是一个卑微的代码提琴手,但我真的很喜欢 CodeIgniter,所以如果我对山雀有这方面的了解,请原谅。

还有一件事——你的构造函数肯定有点浪费。所有库和帮助程序的加载都是通过自动加载文件完成的。

【讨论】:

    【解决方案5】:

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

    希望对你有帮助

    【讨论】:

      【解决方案6】:

      你可以这样做

      控制器中定义数组

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

      并将变量传递给视图

      echo $hello; 
      

      【讨论】:

      • 这个答案只会给页面添加冗余信息,可以安全删除。
      【解决方案7】:

      如果你通过了

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

      希望对你有所帮助。

      【讨论】:

      【解决方案8】:

      在你的控制器中你可以通过

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

      在你看来你可以调用

      echo $poll; 
      

      【讨论】:

      • 这个答案只会给页面添加冗余信息,可以安全删除。
      【解决方案9】:

      在控制器中:

      $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
      

      【讨论】:

      • 这个答案只会给页面添加冗余信息,可以安全删除。
      【解决方案10】:

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

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

      型号

      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"]; ?>
      

      这是一个很大的帮助。我通过测试发现了它,它对我有用。

      【讨论】:

        【解决方案11】:

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

        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。如果你想循环它,你也可以这样做。

        【讨论】:

          【解决方案12】:

          在控制器中:

          公共函数product(){

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

          "subject":"计算机科学");

          从模型到控制器的数据

          $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']; } ?>
          

          【讨论】:

            【解决方案13】:

            代替

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

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

            在您的控制器文件中,控制器会将具有 hello 作为 stringdata 发送到 results_view 并且在您的视图文件中,您可以通过

            echo $hello;
            

            【讨论】:

            • 这个答案只会给页面添加冗余信息,可以安全删除。
            猜你喜欢
            • 2011-09-09
            • 2016-05-30
            • 1970-01-01
            • 1970-01-01
            • 2014-12-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多