PHP最简单自定义自己的框架view使用引入smarty(8)--自定义的框架完成

1、实现效果。引入smarty, 实现assign和 display

 

2、下载smarty,创建缓存目录cache和扩展extend 

点击下面查看具体下载使用,下载改名后放到extend 

PHP之Smarty使用以及框架display和assign原理_PHP隔壁老王邻居的博客-CSDN博客

3、当前控制器方法和缓存目录cache、扩展extend 定义,KJ.php

    //运行控制器中方法public static function _run(){$c=strtolower(isset($_GET['c'])?$_GET['c']:'index');$a=strtolower(isset($_GET['a'])?$_GET['a']:'index');define('CRL',$c);  //当前控制器define('ACTION',$a);//当前方法$c.='Crl';if(!class_exists($c)){die("控制器".$c."不存在");}$obj=new $c();if(!method_exists($obj,$a)){die("控制器".$c."下".$a."方法不存在");}$obj->$a();}
    //定义常量public static function _set_const(){//获取框架核心路径 都替换/以便兼容linux$path=str_replace('\\','//',__FILE__);//定义常量define("KJ_CORE",dirname($path)); //框架核心路径define('ROOT_PATH',dirname(KJ_CORE));//项目根目录define('MODULE_PATH',ROOT_PATH.'/'.MODULE);//模块define('CONTROLLER',MODULE_PATH.'/controller');//定义控制器define('MODEL',MODULE_PATH.'/model');//定义模型define('VIEW',MODULE_PATH.'/view');//定义显示define('EXTEND',KJ_CORE.'/extend');//定义扩建路径define('CACHE',ROOT_PATH.'/cache');//定义缓存路径//模板编译目录define('APP_COMPILE_PATH',CACHE.'/view/'.MODULE.'/Compile');//模板缓存define('APP_CACHE_PATH',CACHE.'/view/'.MODULE.'/Cache');}

4、创建SmartyBase.php,引入smarty和封装

<?php
include_once EXTEND.'/smarty/Smarty.class.php';
class SmartyBase{private static  $smarty;public  function __construct(){if(!is_null(self::$smarty)) return;$smarty=new Smarty();self::$smarty=$smarty;$smarty->template_dir=VIEW.'/'.CRL.'/';$smarty->compile_dir=APP_COMPILE_PATH;$smarty->cache_dir=APP_CACHE_PATH;$smarty->left_delimiter='{';//模板标签左$smarty->right_delimiter='}';//模板标签右$smarty->caching=true; //缓存开启$smarty->cache_lifetime=60;//缓存时间}//显示模板protected  function  display($tpl){self::$smarty->display($tpl,$_SERVER['REQUEST_URI']);}//参数赋值protected function assign($var,$value){self::$smarty->assign($var,$value);}//模板缓存protected function is_cached($tpl=NULL){$tpl=$this->get_tpl($tpl);return   self::$smarty->isCached($tpl,$_SERVER['REQUEST_URI']);}}

5、创建控制器基类,继承smarty及封装,
CrlBase.php

<?php
class CrlBase extends SmartyBase
{private  $var;public  function __construct(){parent::__construct();}protected function display($tpl=NULL){$path=$this->get_tpl($tpl);if(!is_file($path)) die($path.'模板文件不存在');if($this->var){extract($this->var);}parent::display($path);}protected function assign($var,$value){parent::assign($var,$value);}protected function get_tpl($tpl){if(is_null($tpl)){$path=VIEW.'/'.CRL.'/'.ACTION.'.html';}else{$suffix=strrchr($tpl,'.');$tpl=empty($suffix)?$tpl.'.html':$tpl;$path=VIEW.'/'.CRL.'/'.$tpl;}return $path;}}

6、控制器indexCrl.php,assign和display

<?php
class indexCrl extends  CrlBase {public function index(){if($this->is_cached()){$this->assign('a',time());}$this->assign('a',time());$this->display();}
}

7、模板显示index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
smarty参数显示:{$a}
</body>
</html>

8、完整KJ.php代码

<?phpfinal class KJ{public static function run(){//定义常量self::_set_const();//创建模块目录self::_mk_module();//类自动加载spl_autoload_register(array(__CLASS__,'_autoload'));//运行框架self::_run();}//运行控制器中方法public static function _run(){$c=strtolower(isset($_GET['c'])?$_GET['c']:'index');$a=strtolower(isset($_GET['a'])?$_GET['a']:'index');define('CRL',$c);  //当前控制器define('ACTION',$a);//当前方法$c.='Crl';if(!class_exists($c)){die("控制器".$c."不存在");}$obj=new $c();if(!method_exists($obj,$a)){die("控制器".$c."下".$a."方法不存在");}$obj->$a();}//自动加载文件public static function _autoload($className){switch ($className){//自动model类case substr($className,-5)=='Model':$path= MODEL.'/'.$className.'.php';if(is_file($path))  include $path;break;//自动加载控制器case substr($className,-3)=='Crl':$path= CONTROLLER.'/'.$className.'.php';if(is_file($path))  include $path;break;//自动加载基类case substr($className,-4)=='Base':$path= KJ_CORE.'/base/'.$className.'.php';if(is_file($path))  include $path;break;default :break;}}//定义常量public static function _set_const(){//获取框架核心路径 都替换/以便兼容linux$path=str_replace('\\','//',__FILE__);//定义常量define("KJ_CORE",dirname($path)); //框架核心路径define('ROOT_PATH',dirname(KJ_CORE));//项目根目录define('MODULE_PATH',ROOT_PATH.'/'.MODULE);//模块define('CONTROLLER',MODULE_PATH.'/controller');//定义控制器define('MODEL',MODULE_PATH.'/model');//定义模型define('VIEW',MODULE_PATH.'/view');//定义显示define('EXTEND',KJ_CORE.'/extend');//定义扩建路径define('CACHE',ROOT_PATH.'/cache');//定义缓存路径//模板编译目录define('APP_COMPILE_PATH',CACHE.'/view/'.MODULE.'/Compile');//模板缓存define('APP_CACHE_PATH',CACHE.'/view/'.MODULE.'/Cache');}//自动创建模块目录public static function _mk_module(){$arr=[MODULE_PATH,CONTROLLER,MODEL,VIEW,];foreach ($arr as $v){is_dir($v) || mkdir($v,0777,true);}}}
KJ::run();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1380048.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

javaWeb-filter(过滤器二)

01.反馈-复习-学习目标 反馈 内容idea2018包名写中文无法正常启动服务器作业有没有详细介绍感觉没有思路呢2019版本过滤器在同时配置了注解与XML的情况下同一个过滤器为什么会执行两次符合拦截路径的每个过滤器都会运行&#xff0c;如果多次需要调试代码重定向和转发跳转&…

vue中局部过滤器和全局过滤器的使用

关于 vue 过滤器 在vue1.0的时候其实是内置了过滤器的&#xff0c;但是考虑到好多过滤器并不一定会被开发所调用&#xff0c;所以把原本内置的过滤器就给去掉了&#xff0c;但是过滤器还是比较普遍的&#xff0c;所以我们从vue2.0之后就需要自己定义过滤器 以上是vue官方对于过…

瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士联手,搞不定弹出广告 amp; 恶意广告图标...

一位网友说他的电脑近期出了问题&#xff1a;开机后桌面和任务栏上的高速启动栏会出现恶意图标。删除了下次开机又会出现&#xff1b;使用电脑过程中每分钟都会弹出广告。他为电脑安装了瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士。以及广告神盾&#xff0c;都不能解决…

《颠覆者 周鸿伟自传》阅读笔记

《颠覆者 周鸿伟自传》读后感 2022年11月14号读完&#xff0c;花了两天的时间读完。周鸿伟作为一个从小叛逆高智商的男生&#xff0c;对计算机有着执着的热爱&#xff0c;大学选择计算机&#xff0c;本科和研究生期间创业三次&#xff0c;从杀毒卡到3721再到360安全卫士&#x…

详细分析Apple macOS 6LowPAN 漏洞(CVE-2020-9967)

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 安全研究员 Alex Plaskett 在2020年5月向苹果报告了影响MacOS Big Sur 的一个漏洞 &#xff08;CVE-2020-9967&#xff09;。苹果公司在12月5日宣布该漏洞已在各平台公开后&#xff0c;Plaskett 于昨天发布了该漏洞的…

已解决 adb server version 31 doesn't match this client 36

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 运行adb 命令的时候报错: C:\Users\Administrator>adb devices List of devices atta…

详细分析开源软件项目 Ajax.NET Professional 中的RCE 漏洞(CVE-2021-23758)

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 作者&#xff1a;Hans-Martin Mnch 编译&#xff1a;代码卫士 2021年秋&#xff0c;MOGWAI LABS 实验室在为客户进行渗透测试过程中发现了开源组件 “Ajax.NET Professional” 中的一个反序列化漏洞 (CVE-2021-23758…

渗透测试中弹shell的多种方式及bypass

目录 常见姿势bashpythonncphpJava 脚本反弹perl 脚本反弹powershellmsfvenom 获取反弹一句话 Windows白加黑MSBuildInstallutil.exe&csc.exeregasm和regsvcsmshtaMsiexec简介&#xff1a;wmicrundll32 payload分离免杀shellcode loadercsc和InstallUtil 偏僻语言pyinstall…

信息安全技术 网络安全漏洞分类分级指南(GB/T 30279-2020 )

文章目录 前  言1 范围2 规范性引用文件3 术语和定义4 缩略语5 网络安全漏洞分类5.1 概述5.2 代码问题5.3 配置错误5.4 环境问题5.5 其他 6 网络安全漏洞分级6.1 概述6.2 网络安全漏洞分级指标6.3 网络安全漏洞分级方法 附 录 A&#xff08;规范性附录&#…

[渗透测试]Vulnstack 红队(二)

域环境初始化 DC IP&#xff1a;10.10.10.10 OS&#xff1a;Windows 2012(64) 应用&#xff1a;AD域WEB IP1&#xff1a;10.10.10.80 IP2&#xff1a;192.168.111.80 OS&#xff1a;Windows 2008(64) 应用&#xff1a;Weblogic 10.3.6 MSSQL 2008PC IP1&#xff1a;10.10.…

2021长安“战疫”网络安全卫士守护赛 misc部分writeup

2021长安“战疫”网络安全卫士守护赛 misc部分writeup 八卦迷宫朴实无华的取证西安加油ez_Encrypt 一百多名&#xff0c;我觉得还行欸&#xff0c;多亏了队里的crypto手 八卦迷宫 签到题&#xff0c;走迷宫&#xff0c;换成字就可以了 朴实无华的取证 老规矩先看pslist 进程…

腾讯云CVM服务器端口在安全组中打开!

腾讯云服务器CVM端口怎么开通&#xff1f;腾讯云服务器端口是通过配置安全组规则来开通的&#xff0c;腾讯云服务器网以开通80端口为例来详细说下腾讯云轻量应用服务器开启端口的方法&#xff0c;其他的端口的开通如8080、1433、443、3306、8888等端口也适用于此方法&#xff0…

window7 安装JDK17下载安装

1、下载JDK JDK下载官网&#xff1a;https://www.oracle.com/ 2、安装JDK 双击打开下载好的JDK进入安装界面 选择安装的位置 等待安装成功 安装成功 3、环境变量配置 右键此电脑选择属性选择高级系统设置&#xff08;展示是win7系统&#xff0c;win10也有仔细找找&#xff09;…

下载文件旁边附的MD5/SHA256有什么用途

下载软件等文件的时候&#xff0c;在下载地址旁边会附着一个乱码&#xff08;MD5、SHA256等加密后的字符串&#xff09;&#xff0c;之前知道是用来校验文件是否完整的&#xff0c;但一直没有真正用过。今天尝试了一下。非常简单。 例&#xff1a; https://www.python.org/down…

ngx.md5生成文件的md5值

ngx.md5()的参数必须是字符串&#xff0c;但要校验lua上传文件的MD5&#xff0c;怎么办&#xff1f; 方法: 先open 再read, 然后调用ngx.md5 local fio.open(filename,"rb") local s1f:read("*a") ngx.say(ngx.md5(s1)) f:close() 附&#xff1a; ngi…

MD5加密及Python源码魔改

MD5全称:message-digest algorithm 5 翻译过来就是:信息 摘要 算法 5 一、特点 1.长度固定: 不管多长的字符串,加密后长度都是一样长 作用:方便平时信息的统计和管理 详解&#xff1a;经过MD5加密生成一个固定长度为128bit的串。因为128位0和1的二进制串表达不友好&#xf…

【教程】初识云函数,实现无需服务器的项目上云!

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 你是否也在忧愁&#xff0c;想把自己的项目放在云上跑&#xff0c;但又不想花大价钱购买云服务器&#xff1f; 云函数介绍 云函数(Serverless Cloud Function&#xff0c;SCF)的简单理解就是&#xff1a;可以部署…

四、文件上传系列-计算文件MD5值

根据业务需要&#xff0c;在上传文件前我们要读取文件的md5值&#xff0c;将md5值传给后端用作秒传和断点续传文件的唯一标识。那么前端就需要使用js获取文件的md5值&#xff0c;对于普通小文件可以很轻松的读取文件md5值&#xff0c;而超大文件的md5值是如何快速的获取到的呢&…

大华智慧园区综合管理平台SQL注入漏洞

大华智慧园区综合管理平台SQL注入漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现PoC查询当前用户小龙POC检测: 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者…

ApiPost的使用

1. 设计接口 请求参数的介绍 Query:相当于get请求&#xff0c;写的参数在地址栏中可以看到 Body: 相当于 post请求&#xff0c;请求参数不在地址栏中显示。 请求表单类型&#xff0c;用form-data json文件类型&#xff0c;用row 2. 预期响应期望 设置完每一项点一下生成响应…