文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用Composer从零开发一个简单的web框架(05)-php模板

admin

admin

2024-04-02 17:21

关注

框架会集成2个模板引擎,php语言原生和Twig,本章集成php语言原生模板

模板接口

新建core/tpl/Tpl.php,内容如下。所有的模板实现都要实现它接口函数,内容很简单,assign 实现模板变量赋值, import 输出模板文件

<?php
namespace core\tpl;


interface Tpl {
public function assign($key, $val);
public function import($filename);
}

模板基类

新建core/tpl/baseTpl.php,内容如下。主要声明了模板目录和模板数据变量以及实现了Tpl接口的assign方法

<?php
namespace core\tpl;


class baseTpl implements Tpl {

protected $_tplDir;

protected $_tplData = [];


public function __construct($tplDir) {
$this->_tplDir = $tplDir;
}

public function assign($key, $val) {
if (is_array($key)) {
foreach ($key as $k => $v) {
$this->_tplData[ $k ] = $v;
}
} else {
$this->_tplData[ $key ] = $val;
}
}

public function import($filename) {

}
}

php模板

新建core/tpl/PhpTpl.php,内容如下

<?php
namespace core\tpl;


class PhpTpl extends baseTpl {
public function import($tpl) {
$filename = $tpl ?: CONTROLLER . '/' . METHOD . '.phtml';
$filename = $this->_tplDir . $filename;

if (!file_exists($filename)) {
echo '<strong style="color:#F30">Can\'t find Template:' . $tpl . '</strong>';
exit();
}

extract($this->_tplData);
require_once $filename;
}
}

集成模板

编辑public/index.php,主要定义了APP_TPL常量为php即使用 php模板引擎,PATH_VIEW常量为模板目录

// 日志目录
define('PATH_LOG', PATH_RUNTIME . 'log/');

// 使用的模板引擎(php 或者 twig)
define('APP_TPL', 'php');
// 模板目录(如果未定义, 默认使用 app/应用/view/ 目录)
//define('PATH_VIEW', __DIR__ . '/views/');

// 默认应用
define('DEFAULT_APP', 'home');

编辑core/App.php,处理当用户没有定义PATH_VIEW常量时要设置一个默认的模板目录

define('CONTROLLER',$controller);

// 模板目录
defined('PATH_VIEW') or define('PATH_VIEW', PATH_APP . $app . '/view/');

// 控制器类文件名大写
$controllerFile = ucfirst($controller);
$module = "app\\{$app}\\controller\\{$controllerFile}";

编辑core/Controller.php,引入模板相关类

<?php
namespace core;

use core\tpl\PhpTpl;
use core\tpl\Tpl;

编辑core/Controller.php,添加处理模板调用

public function assign($key, $val) {
$this->_template();
$this->_tpl->assign($key, $val);
}
public function import($filename = '') {
$this->_template();
$this->_tpl->import($filename);
}

private $_tpl = null;
private function _template() {
if ($this->_tpl) return;

if (APP_TPL == 'php') {
$this->_tpl = new PhpTpl(PATH_VIEW);
} else {
exit('没有定义 ' . APP_TPL . ' 模板引擎');
}
}

测试模板

编辑app/home/controller/Hello.php,添加viewview2方法

public function view() {
$this->assign('name', '老王');
$this->assign('varIf', true);
$this->assign('varFor', 5);
$this->assign('varForeach', ['php', 'html']);

$this->import();
}

public function view2() {
$this->assign('name', '老宋');

$this->import('hello/view2.phtml');
}

新建app/home/view/hello/view.phtml文件,内容如下

Hello, <?=$name?> from Hello.view

<br /><br />
php 模板写法

<br /><br />
<?php if ($varIf): ?>
    $varIf 变量为 true
<?php else: ?>
    $varIf 变量为 false
<?php endif; ?>

<br /><br />
<?php for ($i = 0; $i < $varFor; $i++): ?>
    for $i: <?=$i?><br />
<?php endfor; ?>

<br />
<?php
foreach ($varForeach as $k => $v): ?>
    foreach $k: <?=$k?>, $v: <?=$v?><br />
<?php endforeach; ?>

新建app/home/view/hello/view2.phtml文件,内容如下

Hello, <?=$name?> from Hello.view2

浏览器访问 http://phpweb.com/home/hello/view,输出

Hello, 老王 from Hello.view

php 模板写法

$varIf 变量为 true

for $i: 0
for $i: 1
for $i: 2
for $i: 3
for $i: 4

foreach $k: 0, $v: php
foreach $k: 1, $v: html

浏览器访问 phpweb.com/home/hello/view2 ,输出

Hello, 老宋 from Hello.view2
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     417人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     194人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     155人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     232人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     60人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯