文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-03 14:22

关注

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

        Titlesmarty参数显示:{$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

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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