问题:我似乎无法从视图调用控制器方法。 原因:因为我想在该方法和环路传递参数的数据如何在Codeigniter中使用控制器方法
鉴于:
foreach($data as $key => $val){
foreach($methodData($val['dataID']) as $mKey => $mVal){
echo $mVal['name'];
}
}
问题:我似乎无法从视图调用控制器方法。 原因:因为我想在该方法和环路传递参数的数据如何在Codeigniter中使用控制器方法
鉴于:
foreach($data as $key => $val){
foreach($methodData($val['dataID']) as $mKey => $mVal){
echo $mVal['name'];
}
}
这不是在MVC模式recomended。您应该只在视图中显示数据(您从控制器传递的数据)。
考虑如此设置您的控制器中所需的数据,并将正确的模型传递给您的视图。
可以说有一个叫'丛林'的模型。在模型中,我们使用搜索词搜索大象。如果没有大象回来,我们加载搜索表单并将搜索词传回给它。
在控制器
// check first if no results came back from the model
if(! $data['elephants'] = $this->jungle->getElephants($searchterm)){
$data['searchterm'] = $searchterm ;
$this->load->view('searchform_elephants', $data); }
// we have results, $elephants data structure is assigned to $data
// and passed to the view so it can be accessed on the view page
else { $this->load->view('show_elephants', $data); }
如果一些大象回来,那么$大象对象(或阵列)被分配给$的数据,然后它被传递到视图。
然后在您的视图中 - 您可以根据数据结构的类型对结果进行预处理。最后 - 如果您知道您从数据库中检索的内容等是单个记录,则可以将查询结果分配给row()。然后在视图中,您不必做一个foreach等。例如,如果你用的$ id
// controller
$data['snowflake'] = $this->blizzard->getFlakeBy($id) ;
// view
echo $snowflake->firstname ;
此页面为DEETS得到一个独一无二的雪花:https://ellislab.com/codeigniter/user-guide/database/results.html
所以,我应该怎么办循环数据?我会在控制器中创建新的方法并从该方法解析? – Gabriel 2014-10-12 13:49:47
好吧,我只是循环并在控制器中创建xml/array并读取视图中的数据。感谢您的回答。 – Gabriel 2014-10-12 14:02:03
您的循环应该位于模型中,而不是控制器,您的模型应该将准备好的数据返回给控制器和控制器,只应将这些数据传递给视图。 – ahmad 2014-10-12 16:46:38