2012-07-31 73 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