轻量级,基于PHP,布局框架......知道吗?

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.