php - 在 MVC 中处理片段和 View

标签 php model-view-controller oop

如果我的网站上有一个页面,我必须在其中显示 4 或 5 个片段(新闻提要、事件提要等),所有这些都与不同的数据(在不同的模型和数据库表中)有关,那么明智的方法是处理片段内容和布局的生成?我可以使用包含静态函数的单个代码片段 Controller ,每个函数返回一个填充有相关数据的 View 。但是这个片段 Controller 中的每个函数都将与不同的数据/模型进行交互,所以我不确定这是多么面向对象。或者,我可以向每个处理每个关联数据集的 Controller 添加一个静态函数——例如,在 News_Controller 中,以及显示所有新闻项目、单个新闻项目等的函数,我可以添加一个静态函数通过简单地返回我需要的 View 来生成新闻提要。我认为这种方法可能有效,因为我不想为这些简单的片段实例化一个对象,所以在相关 Controller 中使用静态函数有点有意义。这里有点意识流,但我有任何意义吗?!

最佳答案

许多框架都有一些“部分”的概念,通常用于此类事情。

由于这些部分通常是只读的,并且通常显示在每个页面(或一些定义明确的页面集)上,因此您可以像对待页面那样在 Controller 方面考虑它们而无需考虑。

换句话说——请记住,如果您的 View /布局代码直接与您的模型对话是没有问题的,只要它只是询问它们。

我经常这样做:

布局.php:

<div id="newsWidget">
<?PHP $news = Model_News::latest(); ?>
<?PHP foreach($news as $newsitem): ?>
<!-- output some news headlines -->
<?PHP endforeach; ?>
</div>

Model_News::latest() 可能会实现一些缓存等,因为这是布局代码,我可能不想在每次请求时都访问数据库。

无需 Controller 膨胀!

关于php - 在 MVC 中处理片段和 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867508/

相关文章:

php - 在 PHP 和 Laravel 中使用工厂模式

java - 在 C++ 中,我们有引用。但在 Java 中,我们如何最好地使用按值复制 "translate"相同的代码?

php - 如何使用php将数据存储到mysql中

php - 正则表达式和 preg_replace_callback

javascript - 如何在单击链接时传递动态值?

java - Spring MVC 项目中的 HTTP 服务器状态 404 错误

c# - 需要 C# OOP 建议 : What is the Proper Data-Structure for This?

php - 从 SELECT 中插入使列对唯一

asp.net-mvc - 如何避免使用 MVC 标记汤?

c# - Umbraco 站点范围的设置节点