Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CodeIgniter将变量从控制器传递到视图_Codeigniter_Controller - Fatal编程技术网

使用CodeIgniter将变量从控制器传递到视图

使用CodeIgniter将变量从控制器传递到视图,codeigniter,controller,Codeigniter,Controller,我正试图用几个小函数来构造我的控制器,我正在努力处理以下代码: 楼宇控制员: public function index(){ $data['title'] = 'my title part 1'; $data['title'] .= 'my title part 2'; $data = $this->function1(); $data = $this->function2(); $data['end'] .= 'end of this block';

我正试图用几个小函数来构造我的控制器,我正在努力处理以下代码:

楼宇控制员:

public function index(){
   $data['title'] = 'my title part 1';
   $data['title'] .= 'my title part 2';
   $data = $this->function1();
   $data = $this->function2();
   $data['end'] .= 'end of this block';
   $data['main_content'] = 'buildingView';
   $this->load->view('templates/default',$data); 
}

public function1(){
        $data['block1'] = 'test1';
        $data['blockA'] = 'testA';
        $data['blockB'] = 'testB';
        $data['blockC'] = 'testC';
        return $data;
}

public function2(){
        $data['block2'] = 'test2';
        $data['block3'] = 'test3';
        $data['block4'] = 'test4';
        $data['block5'] = 'test5';
        return $data;
}
buildingView

echo $title;
echo $block1;
echo $block2;
echo $end;
问题是function2中的
$data
变量覆盖了function1中的变量。 如何传递从索引内和两个函数生成的数据

我尝试了下面的代码,但也不起作用:

$data[] = $this->function1();
$data[] = $this->function2();
编辑:我编辑了函数1和2,因为它们实际上返回一个包含多个变量的数组

public function index()
{
  $data['title'] = 'my title part 1';
  $data['title'] .= 'my title part 2';
  $data['block1'] = $this->function1();
  $data['block2'] = $this->function2();
  $data['end'] .= 'end of this block';
  $data['main_content'] = 'buildingView';
  $this->load->view('templates/default',$data); 
}
将在视图中使用变量
$block1
$block2
访问函数的结果

为了便于演示,这些定义工作得更好

public function function1()
{
    return 'test1';
}

public function function2()
{
    return 'test2';
}
使用问题代码中定义的helper函数

public function function1(){
    $data['block1'] = 'test1';
    return $data;
}
并将返回值分配给var,然后将其传递给视图

$data['func1'] = $this->function1();
$this->load->view('templates/default',$data);     
$data['func2'] = $this->function2();
$this->load->view('templates/default',$data); 
在视图中,执行此操作以显示结果

echo $func1['block1'];
将数组传递给视图是非常常见且完全可以接受的

公共职能职能2(){ $data['block1']='test2'; $data['block2']='test3'; $data['block3']='test4'; $data['block4']='test5'; 返回$data; }

传递到视图

$data['func1'] = $this->function1();
$this->load->view('templates/default',$data);     
$data['func2'] = $this->function2();
$this->load->view('templates/default',$data); 
在视图中访问。这次使用迭代器来显示每个项目 在数组中

foreach($func2 as $item)
{
   echo $item."<br>";
}
将函数return分配给传递给视图的数组

$data['obj2'] = $this->function2(); 
$this->load->view('templates/default',$data);    
在视图中使用它

echo $obj2->block1;
echo $obj2->block2;
...
迭代器(
foreach
)也适用于对象实例

将在视图中使用变量
$block1
$block2
访问函数的结果

为了便于演示,这些定义工作得更好

public function function1()
{
    return 'test1';
}

public function function2()
{
    return 'test2';
}
使用问题代码中定义的helper函数

public function function1(){
    $data['block1'] = 'test1';
    return $data;
}
并将返回值分配给var,然后将其传递给视图

$data['func1'] = $this->function1();
$this->load->view('templates/default',$data);     
$data['func2'] = $this->function2();
$this->load->view('templates/default',$data); 
在视图中,执行此操作以显示结果

echo $func1['block1'];
将数组传递给视图是非常常见且完全可以接受的

公共职能职能2(){ $data['block1']='test2'; $data['block2']='test3'; $data['block3']='test4'; $data['block4']='test5'; 返回$data; }

传递到视图

$data['func1'] = $this->function1();
$this->load->view('templates/default',$data);     
$data['func2'] = $this->function2();
$this->load->view('templates/default',$data); 
在视图中访问。这次使用迭代器来显示每个项目 在数组中

foreach($func2 as $item)
{
   echo $item."<br>";
}
将函数return分配给传递给视图的数组

$data['obj2'] = $this->function2(); 
$this->load->view('templates/default',$data);    
在视图中使用它

echo $obj2->block1;
echo $obj2->block2;
...

迭代器(
foreach
)也适用于对象实例。

您正在重写$data变量。因此,对于您的情况,请使用
array\u merge()
,并将其放在
$data
变量的顶部。如下

public function index(){
   $data1 = $this->function1();
   $data2 = $this->function2();
   $data = array_merge($data1,$data2);
   $data['title'] = 'my title part 1';
   $data['title2'] .= 'my title part 2';
   $data['end'] .= 'end of this block';
   $data['main_content'] = 'buildingView';
   $this->load->view('templates/default',$data); 
}

public function1(){
        $data['block1'] = 'test1';
        $data['blockA'] = 'testA';
        $data['blockB'] = 'testB';
        $data['blockC'] = 'testC';
        return $data;
}

public function2(){
        $data['block2'] = 'test2';
        $data['block3'] = 'test3';
        $data['block4'] = 'test4';
        $data['block5'] = 'test5';
        return $data;
}

您正在重写$data变量。因此,对于您的情况,请使用
array\u merge()
,并将其放在
$data
变量的顶部。如下

public function index(){
   $data1 = $this->function1();
   $data2 = $this->function2();
   $data = array_merge($data1,$data2);
   $data['title'] = 'my title part 1';
   $data['title2'] .= 'my title part 2';
   $data['end'] .= 'end of this block';
   $data['main_content'] = 'buildingView';
   $this->load->view('templates/default',$data); 
}

public function1(){
        $data['block1'] = 'test1';
        $data['blockA'] = 'testA';
        $data['blockB'] = 'testB';
        $data['blockC'] = 'testC';
        return $data;
}

public function2(){
        $data['block2'] = 'test2';
        $data['block3'] = 'test3';
        $data['block4'] = 'test4';
        $data['block5'] = 'test5';
        return $data;
}

这很好,我想到了这一点,但是我的2个函数返回了一个包含许多变量的数组。有更好的方法吗?我编辑了我的问题,传回一个包含许多变量的数组是很好的-非常常见的做法。没有比这更好的办法了。也可以使用类对象。我已经修改了答案来说明如何使用类。这很好,我想到了这一点,但是我的2个函数返回了一个包含许多变量的数组。有更好的方法吗?我编辑了我的问题,传回一个包含许多变量的数组是很好的-非常常见的做法。没有比这更好的办法了。也可以使用类对象。我已经修改了答案来说明如何使用类。最简单的解决方案!易于实现我已经阅读了关于如何在codigniter最简单的解决方案中将值从控制器传递到视图的详细指南!易于实现我已经阅读了关于如何在codigniter中将值从控制器传递到视图的详细指南