本节介绍在控制器方法中使用模板引擎。这里用到twig。twig文档地址:https://www.kancloud.cn/yunye/twig-cn/159454
使用composer安装twig,修改D:\WAMP\wamp\www\framework\composer.json,内容(这里安装的twig最新版本2.4.4,或者写*):
{
"require":{
"twig/twig": "2.4.4",
"slim/slim": "3.9.0"
}
}
在命令行输入 composer update安装。
在D:\WAMP\wamp\www\framework\frame\下创建模板引擎类View.php,目的是结合控制器调用时指定的模板文件的路径,内容:
<?php
namespace frame;
use twig\twig;
class View {
protected $twig;
protected $data = array();
public function __construct($path) {
$loader = new \Twig_Loader_Filesystem(ROOT_PATH . '/app/' . $path .'/view');
$this->twig = new \Twig_Environment($loader, array(
// 'cache' => FRAME_PATH . 'cache', // 注释表示不用缓存
'debug' => false // 开启调试模式
));
}
/*
* 设置模板数据
* 2中设置方法
* 1)key value方式:assign('key', 'value')
* 2)数组方式:assign(array('key' => 'value'))
*/
public function assign($var, $value = NULL) {
if(is_array($var)) {
$this->data = array_merge($this->data, $var);
}else {
$this->data[$var] = $value;
}
}
public function display($template) {
$template = $this->twig->loadTemplate($template . '.html');
$template->display($this->data);
}
}
修改D:\WAMP\wamp\www\framework\app\index\controller\index.php,调用模板引擎,内容:
<?php
namespace index\controller;
use frame\View;
class index {
protected $view;
public function __construct() {
$this->view = new View(C('app_name'));
}
public function testView() {
$this->view->assign('name', 'welson');
$this->view->assign(array('data' => array('tom', 'cat', 'dog')));
$this->view->display('index/test');
}
}
在D:\WAMP\wamp\www\framework\app\index\view\下创建index文件夹,在index文件夹下创建模板文件test.html,内容如下:
<html>
<body>
{{name}} <br>
循环: <br>
{% for item in data %}
<li>{{item}}</li>
{% endfor %}
</body>
</html>
修改D:\WAMP\wamp\www\framework\frame\FrameAutoLoad.php,使其加载定义了命名空间的View.php类,内容:
<?php
class FrameAutoLoad {
/* 自动加载类 */
public static function autoload($class) {
if(false !== strpos($class, '\\')) {
// 加载app下的文件
$path = ROOT_PATH . '/app/' . str_replace('\\', '/', $class) . '.php';
if(file_exists($path)) {
require $path;
return ;
}
// 加载框架类-命名空间的类
$path = ROOT_PATH . '/' . str_replace('\\', '/', $class) . '.php';
if(file_exists($path)) {
require $path;
return ;
}
return ;
}
// 加载frame框架下的文件
$path = FRAME_PATH . $class . '.php';
if(file_exists($path)) {
require $path;
return ;
}
}
}