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