从ThinkPHP迁移项目 - 模板类

优质
小牛编辑
144浏览
2023-12-01

Github : ThinkTemplate - 从ThinkPHP5.1独立出来的编译型模板引擎

安装

  1. composer require topthink/think-template

创建模板配置

修改 Conf/Config.php 文件,在userConf方法中添加如下配置,这里仅配置必须的配置项,完整配置可以参考类库的thinkTemplate类,如果还没有创建视图目录Views和视图缓存目录Temp/TplCache,请提前创建好,并确保缓存目录有写权限

  1. private function userConf()
  2. {
  3. return array(
  4. 'template' => [
  5. // 模板文件目录
  6. 'view_path' => './template/',
  7. // 编译后的模板文件缓存目录
  8. 'cache_path' => './runtime/',
  9. // 模板文件后缀
  10. 'view_suffix' => 'html',
  11. ]
  12. );
  13. }

添加测试模板

View目录下添加一个模板文件Index.html,可以直接复制下面的内容来测试

  1. <!doctype html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  6. <title>Template Test</title>
  7. </head>
  8. <body>
  9. <p>If you see this message, the template engine has been initialized successfully</p>
  10. </body>
  11. </html>

封装视图控制器

为了方便调用,我们创建一个继承自AbstractController的模板类,并实现fetch方法,需要视图输出的控制器来继承这个控制器,以便快速的输出模板

  1. <?php
  2. namespace App;
  3. use ConfConfig;
  4. use CoreAbstractInterfaceAbstractController;
  5. use thinkTemplate;
  6. abstract class ViewController extends AbstractController
  7. {
  8. protected function fetch($tplName, $tplData = [])
  9. {
  10. $tplConfig = Config::getInstance()->getConf('template');
  11. $engine = new Template($tplConfig);
  12. // 由于ThinkPHP的模板引擎是直接echo输出到页面
  13. // 这里我们打开缓冲区,让模板引擎输出到缓冲区,再获取到模板编译后的字符串
  14. ob_start();
  15. $engine->fetch($tplName, $tplData);
  16. $content = ob_get_clean();
  17. $this->response()->write($content);
  18. }
  19. }

添加测试控制器

修改默认的Index控制器,位于AppControllerIndex.php,继承自ViewController并尝试输出模板

  1. namespace AppController;
  2. use AppViewController;
  3. class Index extends ViewController
  4. {
  5. function index()
  6. {
  7. // 输出Index模板
  8. $this->fetch('Index');
  9. }
  10. function onRequest($actionName)
  11. {
  12. // TODO: Implement onRequest() method.
  13. }
  14. function actionNotFound($actionName = null, $arguments = null)
  15. {
  16. // TODO: Implement actionNotFound() method.
  17. }
  18. function afterAction()
  19. {
  20. // TODO: Implement afterAction() method.
  21. }
  22. }

至此已经可以将ThinkPHP的模板文件直接迁移到easySwoole中,更多模板的用法可以参考5.1完全开发手册的模板引擎章节