1 - 这是一个偏好问题。最简单的方法是拥有一个单独的页眉和页脚文件。然后你可以在你的页面控制器中做这样的事情
$title="Page Title";
$var1 = 'var1';
$var2 = 'var2';
$var3 = array("asdf","adsfasdf","234");
include(HEADER); //$title is in header
include(DIR_VIEWS . 'page.php'); //$var1/2/3 are in page.php
include(FOOTER);
// variable were created before pages were included so they will be set in the templates
如果你要走嵌套路线,你将不得不开始摆弄 str_replace 并开始走向模板引擎,超出了这个答案的范围。
2 - 无需创建视图对象。 “视图”可以只是文件系统上的一个文件,其中包含该视图的 html。就像我上面的例子一样。这些页面也可以包含基本的 php 到循环/回显变量。
3 - 您正在描述一个前端控制器(有时称为调度程序或路由器)。这真的是要走的路。有几种创建前端控制器的方法。
您可以拥有一组指向控制器的 url。
$routes = array (
'~^/home/$~' => 'home.php',
'~^/contact/$~' => 'contact.php',
'~^/blog/.*?$~' => 'blog.php'
);
或者您可以使用 url 中的第一个“目录”作为控制器名称并从您的控制器目录中加载该文件。
4 - 控制器的全部意义在于从模型中获取信息并将数据传递给视图。
已编辑以供评论
如果您希望一堆视图有一个侧边栏,您只需将该视图包含在另一个视图中即可。例如:
<div id="content">
<p>lorem ispum stuff</p>
</div>
<?php include(DIR_VIEWS . 'sidebar.php');
只需确保在“控制”带有侧边栏的页面的控制器中包含一些用于侧边栏功能的代码:
if ( $_GET['keywords'] ) {
$sidebar_search_results = get_search_results($_GET['keywords']);
}
// this code should be in a file that you include
$sidebar_search_results 可以是您的侧边栏视图解析和显示的结果数组。