2014-10-12 81 views
0

问题:我似乎无法从视图调用控制器方法。 原因:因为我想在该方法和环路传递参数的数据如何在Codeigniter中使用控制器方法

鉴于:

foreach($data as $key => $val){ 
    foreach($methodData($val['dataID']) as $mKey => $mVal){ 
     echo $mVal['name']; 
    } 
} 

回答

0

这不是在MVC模式recomended。您应该只在视图中显示数据(您从控制器传递的数据)。

考虑如此设置您的控制器中所需的数据,并将正确的模型传递给您的视图。

+0

所以,我应该怎么办循环数据?我会在控制器中创建新的方法并从该方法解析? – Gabriel 2014-10-12 13:49:47

+0

好吧,我只是循环并在控制器中创建xml/array并读取视图中的数据。感谢您的回答。 – Gabriel 2014-10-12 14:02:03

+0

您的循环应该位于模型中,而不是控制器,您的模型应该将准备好的数据返回给控制器和控制器,只应将这些数据传递给视图。 – ahmad 2014-10-12 16:46:38

0

可以说有一个叫'丛林'的模型。在模型中,我们使用搜索词搜索大象。如果没有大象回来,我们加载搜索表单并将搜索词传回给它。

在控制器

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

相关问题