我投票给 PHP。 (PHP 是一个模板引擎。)
function template($file, $vars) {
ob_start();
if(count($vars) > 0) { extract($vars); }
include 'views/'.strtolower($file).'.php';
return ob_get_clean();
}
顺便说一句,它可以让您执行以下操作。
echo template('layout', array( 'content' => template('page', $myData) ));
当 PHP 本身只需要 6 行代码就足够时,您还应该使用另一个模板/布局引擎吗?
编辑:
也许我不清楚这是如何工作的。
template() 使用模板的名称(也用于组织工作的子目录)调用,并将数组对象作为第二个参数。如果给定的变量不是空的,比如template('index',null),那么这个数组就被当作一个关联数组:每个键都变成一个包含值的变量。
所以逻辑变成:
template('my_template', array(
'oranges' => 'apples'
));
而“views/my_template.php”是:
<html>
<head>
<title>Are apples == <?= $oranges ?>?</title>
</head>
<body>
<p style="color: <?= $oranges == 'oranges' ? 'orange" : 'darkgreen' ?>">
Are apples == oranges?
</p>
</body>
</head>
因此,每次使用变量$oranges 时,PHP 都会获取从数组$vars['oranges'] 导出的数据。
所以所有的输出都被ob_get_clean() 获取并作为字符串返回。要仅输出此字符串echo 或print,或将其分配给要作为内容传递给布局的数组。如果你理解了这一点,那么就很容易把我写的东西拿来做一个布局,或者甚至可以输出 JSON 的逻辑页面。
我建议您在丢弃它之前尝试一下这个答案。它有一种在你身上生长的趋势。
编辑 2:
根据要求,我将展示我的项目将使用的目录布局。请注意,其他 MVC 框架使用不同的结构。但是,我喜欢我的简单。
index.php
application/
framework.php
controllers/
welcome.php
views/
template.php
index.php
出于安全目的,我有一个.htaccess 文件,它将除js/ 或css/ 之外的每个请求路由到index.php 脚本,从而有效地隐藏了我的目录。如果您愿意,您甚至可以通过模板制作 CSS,我已经这样做了,用于使用变量等。
因此,对template('template', array()) 的任何调用都会自动加载文件./views/template.php。如果我在名称中包含斜杠,它将成为路径的一部分,如下所示:./views/posts/view.php。
编辑 3:
感谢您的更新。因此,您的 index.php 文件中必须有一些代码将请求的 url 路由到适当的控制器,对吗?你能展示一些吗?此外,您的视图看起来不像您的控制器目录。你能解释一下 url 如何映射到控制器和/或视图吗?你在framework.php中有什么?它有什么作用?谢谢!
我展示的代码是我用于 Web 开发的私有框架的一小段摘录。 I've talked already about potentially releasing it 具有双重许可,或作为商业用途的捐赠软件,但它不是任何人都不能在短时间内(15-21 天)编写的。如果你愿意,你可以read my source code on GitHub... 但请记住它仍然是 alpha 材料。
许可证是Creative Commons SA。