1

我正在尝试构建一个简单的 PHP MVC 框架。我现在拥有的是一个带有路由器的基本设置,它将请求发送到正确的控制器,所以我正在制作 URL

/blog/[id]

解析为类方法,例如

Blog->singlePost();

在 singlePost() 内;然后我与模型交互以获得正确的博客文章并将其发送到视图。基本的 MVC 三元组就在那里。

但是页面比这更复杂。我有一个侧边栏,需要填充数据(来自数据库和其他来源)。我有一个要构建的主菜单,我需要显示当前登录用户的详细信息等等。但是,也就是说,我不需要每一页上的所有这些部分。

我的问题是,我在哪里为视图启动/构建所有这些不同的共享部分?

我能想到的选择是:

  1. 让每个控制器发送请求以构建所需的附加部分(每次添加某些内容时都必须更新每个控制器,没办法)
  2. 映射 URL 时,定义路由所属的组,该组在所有必需的部分中加载(不理想,不是每个页面都需要每个部分,可能会变得混乱)
  3. 让视图(或模板)按需嵌入这些部分。所以这些部分的数据在视图明确要求数据之前不会被检索(这个基本功能看起来很吸引人,但它是否违反了视图应该做什么的规则?)
  4. 还有什么?

3 似乎对我很有吸引力,因为我希望我的模板(将是动态的并且可以通过模板系统切换)能够请求任何页面上的部分。因此,一个模板可能会在主页上显示“Top 10 Blog Posts”,但另一个模板可能不会,因此加载它是没有意义的。我看到使用 Symfony/Twig,你可以这样做:http ://symfony.com/doc/2.0/book/templating.html#embedding-controllers

对于网站上的各种模块,这是一个好主意吗?还是应该在视图开始处理之前加载所有内容?

4

0 回答 0