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

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

PHP最简单自定义自己的框架view使用引入smarty(8)--自定义的框架完成_第1张图片PHP最简单自定义自己的框架view使用引入smarty(8)--自定义的框架完成_第2张图片

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;
    }


}

6、控制器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();

你可能感兴趣的:(自己框架,mysql,php,php,开发语言,数据库,sql)