我正在尝试在几个小函数中构建我的控制器,我正在努力使用以下代码:
建筑控制器:
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的变量。
如何传递Index和两个函数中生成的数据?
我已尝试过以下代码,但它也不起作用:
$data[] = $this->function1();
$data[] = $this->function2();
编辑:我编辑过的功能1& 2因为它们实际上返回了几个变量的数组。
答案 0 :(得分:1)
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';
}
使用问题代码中定义的辅助函数
public function function1(){
$data['block1'] = 'test1';
return $data;
}
将返回值分配给var,然后传递给视图
$data['func1'] = $this->function1();
$this->load->view('templates/default',$data);
在视图中执行此操作以显示结果
echo $func1['block1'];
将数组传递给视图是非常常见且完全可以接受的。
public function function2(){ $ data ['block1'] ='test2'; $ data ['block2'] ='test3'; $ data ['block3'] ='test4'; $ data ['block4'] ='test5'; 返回$ data; }
传递到视图
$data['func2'] = $this->function2();
$this->load->view('templates/default',$data);
在视图中访问。这次使用迭代器来显示每个项目 在阵列中。
foreach($func2 as $item)
{
echo $item."<br>";
}
或者每次获得一件物品
echo $func2['block1']."<br>";
echo $func2['block2']."<br>";
echo $func2['block3']."<br>";
echo $func2['block4']."<br>";
您也可以将对象实例传递给视图。此版本的function2()
返回一个对象实例。
public function function2()
{
$data = new stdClass();
$data->block1 = 'test2';
$data->block2 = 'test3';
$data->block3 = 'test4';
$data->block4 = 'test5';
return $data;
}
将函数return返回给传递给视图的数组
$data['obj2'] = $this->function2();
$this->load->view('templates/default',$data);
在视图中使用它
echo $obj2->block1;
echo $obj2->block2;
...
迭代器(foreach
)也适用于对象实例。
答案 1 :(得分:1)
您正在覆盖$ data变量。因此,对于您的条件,请使用array_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;
}