問題:我似乎無法從視圖調用控制器方法。 原因:因爲我想在該方法和環路傳遞參數的數據如何在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