如何在Codeigniter中使用视图中的控制器方法

时间:2014-10-12 13:41:15

标签: php mysql codeigniter

问题:我似乎无法从视图中调用控制器方法。 原因:因为我想在方法中传递参数并循环数据

在视图中:

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

2 个答案:

答案 0 :(得分:0)

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

考虑一下,在控制器中根据需要设置数据,并将正确的模型传递给您的视图。

答案 1 :(得分: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 ); }

如果一些大象回来了,那么$ elephant对象(或数组)被分配给$ data,然后它被传递给视图。

然后在您的视图中 - 您可以根据数据结构的类型预测结果。

 foreach($elephants as $index => $elephant) : 

    echo $elephant->firstname . ' ' . $elephant->lastname ; 

最后 - 如果您知道从数据库等中检索的内容是单个记录 - 那么您可以将查询结果分配给row()。那么在视图中你不需要做foreach等。例如,如果你通过$ id获得一个独特的雪花

    // controller 
    $data['snowflake'] = $this->blizzard->getFlakeBy($id) ; 

   // view 
   echo $snowflake->firstname ; 

deets的这个页面:https://ellislab.com/codeigniter/user-guide/database/results.html