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和封装
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
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; }}
控制器indexCrl.php,assign和display
is_cached()){ $this->assign('a',time()); } $this->assign('a',time()); $this->display(); }}
7、模板显示index.html
Title smarty参数显示:{$a}
8、完整KJ.php代码
$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();
来源地址:https://blog.csdn.net/weixin_39934453/article/details/132242100