我正在构建一个小型MVC应用程序,我想提供从基础(即父级)模板继承的网页。所以,我已经创建了一个View.php
类来初始化模板:
<?php
class View {
protected $path = $_SERVER['DOCUMENT_ROOT'] . "views/";
protected $data;
public function __construct() { $this->data = array(); }
public function render($view) {
if ( file_exists($this->path.$view) )
include $this->path.$view;
}
public function __set($name, $value) { $this->data[$name] = $value; }
public function __get($name) { return $this->data[$name]; }
}
要加载独立模板,我可以从routes.php
执行以下操作:
$v = new View();
$v->people = ["josh", "alex", "michel"];
$v->render('welcome.php');
和welcome.php
本身就是:
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
<?php print_r($this->people) ?>
</body>
</html>
这适用于独立网页。我想要做的是实现模板继承(就像在Twig或Blade中一样),以便welcome.php
可以从app.php
继承。这就是我想象的:
app.php(父母)
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
<header>...</header>
<?php ***include('content')*** ?>
<footer>...</footer>
</body>
</html>
welcome.php(孩子)
<?php ***extends('app.php')*** ?>
<?php ***block('content')*** ?>
<h1>You made it to welcome.php!</h1>
<?php ***END block('content')*** ?>
答案 0 :(得分:0)
很快:你不能仅仅通过包含php文件来做到这一点。
对于必须解析模板的支持,请构建模板结构。查找所有控制块并按语句执行语句。
一旦有了模板结构,就很容易覆盖模板的任何部分。
答案 1 :(得分:0)
对于那些感兴趣的人,我能够使用this tutorial来近似模板继承。它允许将变量绑定到父模板和子模板,但不允许在单个子模板中覆盖多个块。因此,您无法真正拥有内容,样式和脚本的部分;你只能容纳内容;否则,您需要包含其他PHP文件的标记。我猜这需要包括自定义标签并解析它们,但我没有在网上找到解决方案。如果有人遇到解决方法,请告诉我!