2012-07-31 43 views
0

我的控制器返回一個包含多行和多列的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? 

謝謝!

回答

1

MVC中使用的最佳方法或方法是將您的編程邏輯保存在控制器中,在模型中執行與數據庫相關的東西並在視圖中格式化佈局。在你的情況,你應該叫控制器的$user->getDetails();,然後再循環它傳遞的結果在視圖中輸出的數據,即

在控制器,你可以填充一個變量與$user->getDetails()

$user_details=$user->getDetails(); 

然後通過$user_details到視圖當加載它,並在視圖中循環它

foreach($user_details as $row){ 
    echo $row->id; 
    echo $row->name; 
} 

如果結果是,而不是一個array of arraysan array of objects然後可以使用如下

foreach($user_details as $row){ 
    echo $row['d']; 
    echo $row['name']; 
} 

更新:

  1. 模型負責管理數據;它通常從數據庫中存儲和檢索應用程序使用的實體,幷包含應用程序實現的邏輯。
  2. 視圖(演示文稿)負責以特定格式顯示模型提供的數據。它具有與一些流行的Web應用程序中出現的模板模塊類似的用法,如wordpress,joomla,...
  3. 控制器處理模型和視圖圖層一起工作。控制器接收來自客戶端的請求,調用模型執行請求的操作並將數據發送給View。視圖格式化要呈現給用戶的數據,在web應用程序中作爲html輸出。

參考:Model View Controller(MVC) in PHPThis

+3

**錯誤!**控制器應該既不包含業務而不包含表示邏輯。 – 2012-07-31 16:21:41

+0

那麼,當我這樣說? – 2012-07-31 16:42:58

+1

*在MVC中使用的最佳方式或方法是將您的編程邏輯保存在控制器中,在模型中執行與數據庫相關的東西(..)* <=您在這裏說過。另外,模型不是數據庫抽象。 – 2012-07-31 16:50:32

2

該視圖的目的是運行視圖相關的邏輯和輸出結果(即根據需要獲取數據和格式,如果它是JSON視圖,輸出JSON,HTML輸出HTML等),因此你做對了。儘管你認爲合適,但是沒有關於你的數據結構的更多細節,我們不能說比你已經想到的更多。

1
foreach($user->getDetails() as $row){ 
     echo $row->name; 
     echo $row->id; 
    } 

你不需要把$ user-> getDetails()放在最上面,它會調用foreach中的函數。

+0

謝謝。我希望這將是一個建議的答案。 – 2012-07-31 21:12:11

1

模型圖層應該包含所有的業務邏輯。它不應該返回任何東西給控制器。相反,控制器應該將消息發送到模型層結構。

來自模型層的數據應該由視圖實例提取。根據數據的性質,它會決定應用哪些模板。

MVC中的視圖應該包含所有的表示邏輯和(在與web相關的MVC靈感設計模式的情況下)處理多個模板。您還應該意識到視圖和控制器之間存在1:1的關係。

如果如果從模型層接收到的信息的一部分是某種數組,那麼您有兩種選擇。您可以採用一個模板,它可以呈現單個項目並重復生成HTML/JSON/text/XML片段,或者使用模板,該模板將接收數組作爲變量並已包含循環。後一種方法通常是更務實的方法,但是他們每個人都是一個特殊利弊。

+0

因爲我使用的是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

+0

可能你可以澄清我,如果我誤解了一些東西,所以我會讓自己清楚,謝謝。 – 2012-07-31 19:09:34

+0

爲什麼在這個主題中粘貼兩個工作php框架之一的鏈接?什麼CI稱爲「模型」是主動記錄實例。 Activerecord是[域對象](http://c2.com/cgi/wiki?DomainObject)(這只是實現良好的模型層的一部分)和存儲邏輯的融合。 – 2012-07-31 21:23:22