我正在创建一个用于学习/教学目的的 mvc 结构,到目前为止,我可以设置该结构和一个控制器加上树枝作为模板系统。
结构是:
- 索引.php
- 控制器/
- 错误.php
- 错误.php
- 公司/
- controller_base.php
- view_manager.php
- controller_base.php
- 意见/
- .缓存/
- 错误/
- 视图.html
- 视图.html
所以:
- index 实例化 twig 自动加载器(以及 spl_register 的 mvc 自动加载器)。
- index 实例化错误控制器继承 controller_base。
- controller_base 持有 view_manager。
- 错误调用 view_manager 来显示,
error/view.html
我在浏览器上得到的唯一东西是error/view.html
.
apache日志上没有错误。( error_reporting(E_ALL)
)
正确创建了 Twig 缓存文件,但内容对我来说看起来不太好:
protected function doDisplay(array $context, array $blocks = array()) {
// line 1
echo "error/view.html";
}
任何人都知道为什么,以及如何打印实际视图?
提前致谢。
代码:
index.php:声明自动加载器
function __autoload($class_name)
{
if(file_exists("controllers/$class_name.php")):
include strtolower("controllers/$class_name.php");
elseif(file_exists("models/$class_name.php")):
include strtolower("models/$class_name.php");
elseif(file_exists("inc/$class_name.php")):
include strtolower("inc/$class_name.php");
endif;
}
spl_autoload_register('__autoload');
require_once 'vendor/autoload.php';
Twig_Autoloader::register(); 已被避免,因为 Twig 安装是由作曲家完成的。添加它不会带来任何变化。
error.php(控制器):被调用的方法。
public function show($param)
{
$this->viewMng->display(get_class().$data['view'], array())
}
controller_base.php:
class base
{
protected $viewMng;
public function __construct()
{
$this->viewMng = new viewmanager();
}
}
viewmanager.php:全班
class viewmanager {
private $twig;
protected $template_dir = 'views/';
protected $cache_dir = 'views/.cache';
// protected $vars = array();
public function __construct($template_dir = null) {
if ($template_dir !== null) {
// Check here whether this directory really exists
$this->template_dir = $template_dir;
}
$loader = new Twig_Loader_String($this->template_dir);
$this->twig = new Twig_Environment($loader, array(
'cache' => $this->cache_dir));
}
public function render($template_file, $data = array()) {
if (!file_exists($this->template_dir.$template_file)) {
throw new Exception('no template file ' . $template_file . ' present in directory ' . $this->template_dir);
}
return $this->twig->render($template_file, $data);
}
public function display($template_file, $data) {
if (!file_exists($this->template_dir.$template_file)) {
throw new Exception('no template file ' . $template_file . ' present in directory ' . $this->template_dir);
}
$tmpl = ($this->twig->loadTemplate($template_file));//print_r($tmpl);
$tmpl->display($data);
}
}
视图.html:
<html><body> Hello </body></html>