我的控制器返回一個包含多行和多列的PDO數組。在我的視圖文件中循環數據的最佳方式是什麼? (或者我應該在模型中做更多的邏輯?)PHP MVC,視圖循環處理
$user->getDetails(); //returns array in view
foreach($user->getDetails() as $row) // Prehaps? But how to index without being explicit with column names?
謝謝!
我的控制器返回一個包含多行和多列的PDO數組。在我的視圖文件中循環數據的最佳方式是什麼? (或者我應該在模型中做更多的邏輯?)PHP MVC,視圖循環處理
$user->getDetails(); //returns array in view
foreach($user->getDetails() as $row) // Prehaps? But how to index without being explicit with column names?
謝謝!
在中,在模型中執行與數據庫相關的東西並在視圖中格式化佈局。在你的情況,你應該叫控制器的MVC
中使用的最佳方法或方法是將您的編程邏輯保存在控制器$user->getDetails();
,然後再循環它傳遞的結果在視圖中輸出的數據,即
在控制器,你可以填充一個變量與$user->getDetails()
$user_details=$user->getDetails();
然後通過$user_details
到視圖當加載它,並在視圖中循環它
foreach($user_details as $row){
echo $row->id;
echo $row->name;
}
如果結果是,而不是一個array of arrays
an array of objects
然後可以使用如下
foreach($user_details as $row){
echo $row['d'];
echo $row['name'];
}
更新:
該視圖的目的是運行視圖相關的邏輯和輸出結果(即根據需要獲取數據和格式,如果它是JSON視圖,輸出JSON,HTML輸出HTML等),因此你做對了。儘管你認爲合適,但是沒有關於你的數據結構的更多細節,我們不能說比你已經想到的更多。
foreach($user->getDetails() as $row){
echo $row->name;
echo $row->id;
}
你不需要把$ user-> getDetails()放在最上面,它會調用foreach中的函數。
謝謝。我希望這將是一個建議的答案。 – 2012-07-31 21:12:11
模型圖層應該包含所有的業務邏輯。它不應該返回任何東西給控制器。相反,控制器應該將消息發送到模型層結構。
來自模型層的數據應該由視圖實例提取。根據數據的性質,它會決定應用哪些模板。
MVC中的視圖應該包含所有的表示邏輯和(在與web相關的MVC靈感設計模式的情況下)處理多個模板。您還應該意識到視圖和控制器之間存在1:1的關係。
如果如果從模型層接收到的信息的一部分是某種數組,那麼您有兩種選擇。您可以採用一個模板,它可以呈現單個項目並重復生成HTML/JSON/text/XML片段,或者使用模板,該模板將接收數組作爲變量並已包含循環。後一種方法通常是更務實的方法,但是他們每個人都是一個特殊利弊。
因爲我使用的是CodeIgniter,所以我在例子中回答了[這裏描述](http://codeigniter.com/user_guide/general/models.html)。這個'$ data ['query'] = $ this-> Blog-> get_last_ten_entries();'是在一個控制器內部,它從模型中獲取數據,這意味着modekis將數據返回給控制器,然後控制器將數據傳遞給日期視圖爲'$ this-> load-> view('blog',$ data);'。 – 2012-07-31 19:07:37
可能你可以澄清我,如果我誤解了一些東西,所以我會讓自己清楚,謝謝。 – 2012-07-31 19:09:34
爲什麼在這個主題中粘貼兩個工作php框架之一的鏈接?什麼CI稱爲「模型」是主動記錄實例。 Activerecord是[域對象](http://c2.com/cgi/wiki?DomainObject)(這只是實現良好的模型層的一部分)和存儲邏輯的融合。 – 2012-07-31 21:23:22
**錯誤!**控制器應該既不包含業務而不包含表示邏輯。 – 2012-07-31 16:21:41
那麼,當我這樣說? – 2012-07-31 16:42:58
*在MVC中使用的最佳方式或方法是將您的編程邏輯保存在控制器中,在模型中執行與數據庫相關的東西(..)* <=您在這裏說過。另外,模型不是數據庫抽象。 – 2012-07-31 16:50:32