And*_*rew 4 php layout frameworks
我正在寻找一个基于PHP的轻量级布局框架.就像Zend Framework使用布局一样,我想创建一个布局模板,只包含必要页面的内容.
<html>
<head>
<title><?= $pageTitle ?></title>
</head>
<body>
<?= $content ?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
有人知道有什么事吗?我会使用Zend Framework,但这对于我想要实现的目标来说太过分了.
Rob*_*t K 33
我投票支持PHP.(PHP 是一个模板引擎.)
function template($file, $vars) {
ob_start();
if(count($vars) > 0) { extract($vars); }
include 'views/'.strtolower($file).'.php';
return ob_get_clean();
}
Run Code Online (Sandbox Code Playgroud)
顺便提一下,这可以让您执行以下操作.
echo template('layout', array( 'content' => template('page', $myData) ));
Run Code Online (Sandbox Code Playgroud)
你是否应该费心去使用另一个模板/布局引擎?当PHP本身只需要6行时就足够了吗?
编辑:
也许我不清楚这是如何工作的.
template()使用模板的名称(组织工作的子目录)调用,并将数组对象作为第二个参数.如果给定的变量不是空白,就像template('index',null)是,则将数组视为关联数组:并且每个键都成为包含该值的变量.
所以逻辑变成:
template('my_template', array(
'oranges' => 'apples'
));
Run Code Online (Sandbox Code Playgroud)
而"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>
Run Code Online (Sandbox Code Playgroud)
因此,每次使用变量时,$orangesPHP都会获取从数组中导出的数据$vars['oranges'].
因此,所有输出都被接收ob_get_clean()并作为字符串返回.以输出该字符串只是echo或者print,或将其分配给一个数组来作为内容的布局被传递.如果你理解了这一点,那么很容易把我写的东西和它的布局,或者带有输出JSON的逻辑的页面.
我会建议你在丢弃它之前试验这个答案.它有向你成长的倾向.
编辑2:
根据要求,我将显示我的项目将使用的目录布局.请注意,其他MVC框架使用不同的结构.但是,我喜欢我的简单.
index.php
application/
framework.php
controllers/
welcome.php
views/
template.php
index.php
Run Code Online (Sandbox Code Playgroud)
为了安全起见,我有一个.htaccess的路由每一个请求,除了那些到文件js/或css/到index.php脚本,有效地使我的目录是隐藏的.您甚至可以通过模板制作CSS,如果您愿意,我已经完成了,使用变量等.
因此,任何调用都template('template', array())将./views/template.php自动加载文件.如果我在名称中包含斜杠,它将成为路径的一部分,如下所示:./views/posts/view.php.
编辑3:
谢谢你的更新.所以你必须在index.php文件中有一些代码将所请求的URL路由到适当的控制器,对吗?你能展示一下吗?此外,它看起来不像您的视图镜像您的控制器目录.你能解释一下url如何映射到控制器和/或视图吗?你在framework.php中有什么?它有什么作用?谢谢!
我展示的代码是我的Web开发私有框架的一小部分. 我已经谈到可能会以双重许可证的形式发布它,或者作为商业用途的捐赠物品,但在短时间内(15-21天),任何其他人都无法写出这些内容.如果你想要你可以在GitHub上阅读我的源代码 ......但请记住它仍然是alpha材料.
许可证是Creative Commons SA.