MyStep Framework web 开发框架开源项目

我要开发同款
匿名用户2020年07月03日
88阅读
开发技术PHPHTML/CSS
所属分类Web框架、Web应用开发
授权协议Apache

作品详情

迈思框架(MyStepFramework)是一套基于 [PHP7.0] 的web开发框架,旨在构建一个可以便捷调用常用功能,以最简洁的代码实现目标功能,同时具备高度可扩展性,可通过代理模式,方便的将第三方功能模块集成到框架中。

路由系统-框架通过rewrite方法接管所有响应,除static目录和自定义扩展类型外,其他文件均无法直接通过url访问,兼具高可控性和安全性。(IIS对应web.config,Apache对应.htaccess,NginX需参考目录下文件手动添加)。路由模式-为增加环境适应度,框架同时支持Rewrite,QueryString和PathInfo三种模式,页面中站内URL只需要按照rewrite的模式书写(相对于框架目录,首位无需加"/"),框架将自动调整为对应模式,但为保证最大兼容性,php脚本内的链接多以QueryString模式处理。模版系统-采用二次编译模式,严格实现模板与程序的分离,通过通俗的标签模式调用各类数据。基本模板格式简单易学,方便制作,只要对HTML有一定了解的设计师均可以很快上手,模板修改后即时生效。同时具备高度可扩展性,可根据实际需要任意扩充模版标签。插件系统-可插件模式扩展框架功能,无论是功能增强、系统优化、前台展示均可与系统无缝连接。内容评分、评论、投票、专题、检索、采集、统计等都可以通过插件实现,并可以无缝结合到系统中。应用接口-系统为各类插件提供了丰富的接口,无论是api、模板标签、代码嵌入、脚本附加、登录处理,都可以通过系统接口便捷地实现,为二次开发或插件开发提供最大限度的支持和自由。多语言支持-系统可以随意添加语言包,通过调整参数立即变化。缓存机制-通过三级缓存保证高效数据缓存,用于缓存从数据库查询出的结果集,包含自建文件和数据库两种模式,也可通过代理模式扩展;页面缓存,可将解析好的页面整体缓存到缓存文件,在过期前不用再次生成页面,即实现了静态化的效果,也保留了动态脚本的特性;浏览器缓存,通过etag标识,在客户端再次请求页面数据时,如页面未发生变化,则直接从客户端缓存调用数据,减少了对服务器带宽的请求。公共函数:getMicrotime($rate)-获取微秒时间getTimeDiff($time_start,$decimal,$micro)-取得时间差getDate_cn($date)-获取中文日期shortUrl($url,$max_length)-缩略链接tinyUrl($url)-获取短网址isMobile()-判断是否为移动设备isHttps()-判断当前是否为SSL链接myEval($code)-自定义代码执行checkPara($att_list,$parse)-检测数据变量中是否有待解析的变量,并解析recursionFunction($func,$para)-递归执行某一函数getOB()-获取缓存区内容并清空debug系列函数-变量情况查看执行顺序:所有响应网址均通过rewrite模块反馈给根目录下的index.php脚本统一处理,虽然框架也支持QueryString和PathInfo两种模式,但是为了更好的网址优化和安全性,建议采用rewrite的方式,主要执行流程如下:

初始化框架-通过框架根目录index.php,调用myStep::init()路由模式判断-通过$router->check()判断是否存在自定义路由当前响应路径符合已设定的自定义路由规则,按规则调用指定的响应方法,可由多方法依次执行构成多级响应。可通过框架默认处理方法myStep::getModule()调用相应模块(具体处理流程详见核心类对应方法讲解),也可以根据需要替换为自定义方法。如未发现何时规则,则分析响应路径,将一级路径或默认app指定为响应app,并调用该app路径下的index.php处理框架变量设置-在获取执行入口之后,框架将继续调用以下程序myStep::setPara()-此方法在执行入口脚本之前将调用,用于加载应用设置(config.php)、应用函数库(lib.php),并设置基本框架变量$mystep->preload()-并非myStep类中的原生方法,但是如果应用扩展类中存在此方法,将会在声明类后立即执行lib.php-应用函数库(app/[name]/lib.php,推荐使用命名空间),在核心类已加载并声明实例后加载global.php-本脚本为应用通用脚本,自定义路由模式下通过myStep::getModule()自动加载,其他模式下需手动加载,可用于在模版实例声明后做后期变量及程序调整。$mystep->shutdown()-并非myStep类中的原生方法,但是如果应用扩展类中存在此方法,将在页面结束时执行PHP常量:PATH-当前应用路径ROOT-框架根目录路径ROOT_WEB-框架相对于网站根目录的相对路径APP-应用存放路径LIB-函数及类存放路径CACHE-缓存及临时文件存放路径CONFIG-配置文件存放路径PLUGIN-插件存放路径STATICS-CSS、JS及图片等静态文件存放路径VENDOR-第三方应用库存放路径FILE-文件上传目录全局变量:$s-框架配置,通过对象模式调用,如$s->web-title$info_app-当前调用应用的基本信息,除对应APP信息外(APP目录下info.php定义),还包括path(数组)和route(字符串)项目$mystep-应用入口类,如应用路径下不存在以应用路径名命名的类(如test/test.class.php里面的test类,且此类应该是mystep类的扩展),则调用默认mystep类$db-数据库操作类,在函数初始化时根据设置连接,采用代理模式,可扩展$cache-数据缓存类,在函数初始化时根据设置连接,采用代理模式,可扩展$tpl_setting-模版参数,从app设置中调用,并继承于全局变量$tpl_cache-模版缓存参数,从app设置中调用,并继承于全局变量基础类:myBase为抽象类,可为所有其他子类提供统一的构建方法和错误处理;myTrait为扩展类,可为所调用的类提供一整套魔术方法

myBase->__construct-将构造函数引导至init方法myBase->setErrHandler-设置错误处理函数myBase->error-通过异常处理类处理代码错误myTrait->__set-添加类动态变量,即没有在类中声明过的变量myTrait->__get-调用类动态变量,如变量名为instatnce,则直接返回新的当前类实例myTrait->__destruct-unset类时,注销所有类内部变量myTrait->__call-智能判断并调用方法别名,动态方法或类外部函数myTrait->addMethod-动态添加类方法myTrait->regAlias-注册类内方法别名控制类:myController类为核心控制类,具体用法请参加功能类文档,其中几个重要方法说明如下:

页面附加内容设置-包括setAddedContent和pushAddedContent两个方法,可设置指定关键字的内容,并将相关内容插入到模版中"page_关键字"的位置语言文件管理-包括setLanguage,setLanguagePack和getLanguage三个方法,可设置语言、语言包或调用指定语言、指定索引的文字应用接口设置-包括regApi和runApi两个方法,可通过路由的/api/[str]/[any]调用模块设置-包括regModule和module两个方法,可通过路由的/module/[str]/[any]调用模版标签设置-包括regTag一个方法,将在调用show方法时加载给模版类链接设置-包括regUrl和url两个方法,通过指定方法和相关参数生成对应链接插件设置-包括regPlugin和plugin两个方法,每个插件是应用接口,模块,标签和链接的组合代码钩子设置-包括setFunction和run两个方法,将在指定的位置(start,end,page等,也可自定义)依次(顺序或倒序)执行指定的方法用户账户管理-包括regLog,login,logout和chg_psw四个方法,用于与第三方用户系统对接脚本管理-包括addCSS,removeCSS,clearCSS,CSS,addJS,removeJS,clearJS和JS八个方法,用于动态加载js和css脚本页面控制-包括start,show和end三个方法,用于页面起始、显示和结束etag方法-用于赋予或调用指定标识的浏览器缓存file方法-直接显示指定文件guid方法-生成唯一IDsetOp方法-OPcache设置与调用regClass方法-设置类自动载入规则setAlias方法-设置类调用别名header方法-返回指定的响应头(可以编码或指定的索引,具体参见源代码)核心类:myStep类扩展自myController类,具体用法请参加功能类文档,其中几个重要方法说明如下:

start($set_plugin)-执行于脚本主程序开始之前,用于设置框架类及其方法的调用别名,设定错误报告模式,加载应用对应插件,初始化cookie和session,声明数据库($db,如$s->db->auto为false,则不建立连接,以便于无数据库操作的应用)和缓存($cache)实例,以及为状态变量赋值show(myTemplate$tpl)-用于加载网站基本参数至模版实例,并将结果直接显示(在此可添加针对显示内容的预处理方法);同时也检测并按需更新应用脚本文件([appName].js和[appName].css,详情见相关专题),如设置"$mystep->setting->show=true",则将在页面最下面显示基本运行信息。render(myTemplate$tpl)-与show方法类似,但是返回通过模版实例所生成的页面内容,而不是直接显示setLink($content)-针对所生成页面的链接,根据设定的链接模式(rewrite,pathinfo或querystring)进行处理,页面模版中只要按照rewrite模式书写,在页面显示时将自动通过本预处理方法调整为对应设置的链接。end()-脚本结束时所用的方法,搜集并对比运行结束时的信息,结束并清空变量,并智能调用用户扩展类中自定义的shutdown()方法info($msg,$url)-执行结果或提示信息显示,并在5秒后自动跳转到对应的链接redirect($url,$code)-脚本内链接跳转,如$url为空则退回来路链接;$code默认是302临时跳转,可根据需要改变。init()-静态方法,预初始化基本设置信息(如发现有错误将自动调整),声明类加载模式,如为首次执行框架的话,将自动跳转到初始设置页面go()-框架执行入口,加载设置信息,判断静态文件并直接显示,否则根据路由规则调用相关脚本setPara()-声明框架实例,默认直接调用myStep类,也可在对应APP中扩展,框架会自动调用APP目录下"[appName].class.php"中与APP同名的类。将APP配置覆盖全局配置,然后再调用start方法,同时声明预加载的css和js脚本文件以及模版的初始设置。vendor($class_info)-调用位于VENDOR目录下的第三方PHP功能类,需要满足以下条件。如$class_info为字符串,所调用类(位于vendor目录下)的目录名、文件名和类名必须一致,其中文件名可为"名称.php"或"名称.class.php"$class_info可以为数组,包含dir-目录名称,如不设置默认与file值相同file-不带扩展名的文件名称,扩展名可为".php"或".class.php",如不设置默认与dir值相同class-调用类名称,如不设置默认与file值相同namespace-类的命名空间,没有请留空方法中除了首参数($class_info)外,后面的参数将用于在声明类时,构造函数(__construct()或init())的初始化getModule($m)-自定义路由处理函数(也可以通过自定义方法处理自定义路由,详情参见"自定义路由"专题),机制如下:传入参数$m-本参数传递路由外的路径信息,如路由为/manager/[any],URI为/manager/path1/path2,则$m为path1/path2,即[any]部分,但需要注意的是在本方法中,$m被截取为path1。此参数可直接在自定义的路由处理脚本内调用,但如需在下级函数中调用,需要先进行global处理。本方法将通过myStep::setPara方法调用当前app设置中的模版参数设置(可继承于全局设置,存储于全局变量$tpl_setting中)本方法将按照如下顺序调用处理脚本(发现可用脚本后将立即调用并停止试探)app路径/module/模版样式/$m.php($m为输入参数)app路径/module/模版样式/路由名称.php(如路由为/manager/[any],路由名称为manager)app路径/module/$m.php($m为输入参数)app路径/module/路由名称.php(如路由为/manager/[any],路由名称为manager)app路径/module/模版样式/index.php(模版样式为设置中对应的内容)app路径/module/index.phpJS变量:相关变量是通过脚本在页面被调取时动态生成,在调用时建议在onload事件或jQuery的$(function(){})中调用

language-调用系统语言设置(可自动扩展app语言包)setting-调用系统设置(包括:language,router,debug,app,path_root,path_app,url_fix,url_prefix,url_prefix_app等信息,可通过APP设置重的$setting['js']扩充)global-全局变量,可在任何函数内部调用,可随意扩种,已包含以下子参数:global.root-针对rewrite、pathinfo和querystring模式下的根路径global.root_fix-配合setURL,用于页面链接的自适应调整global.editor_btn-针对tinyMCE编辑器的按钮扩展global.alert_leave-在含表单的页面,如果内容发生变更,且通过非提交方式离开页面的话,将此变量设置为true,即可出现警告global.timer-用于计时器的返回值记录(非强占,可灵活调用)global.func-页面载入后所需运行的函数组JS函数:getPath(lvl)-获取相对于网站根的到调用函数页面所在路径的lvl级路径$id(id)-获取对应id的页面元素$name(name,idx)-获取对应name的页面元素(组),idx可为first,last,数字索引,否则返回全部符合的元素组$tag(name,context)-依照context(默认为document)获取对应tag的页面元素组isArray(para)-判断变量是否为数组loadingShow(info)-显示锁屏信息,再次调用则关闭openDialog(url,width,height,mode)-开启模态窗口openWindow(url,width,height)-新开窗口sleep(the_time)-程序终端指定时间copy(obj)-复制某一页面元素内容(value或innerText)或者一个字符串rndNum(min,max)-生成指定范围内的随机数字rndStr(len,t_lst,c_lst)-生成随机字符串(可自定义采样内容)watermark(obj,rate,copyright,char_c,jam_tag)-添加字符串水印md5(str)-生成str的md5编码debug(para,mode)-检测指定变量para的内容checkObj(obj,func_show)-查看对象属性reportError(msg,url,line)-错误信息处理checkSetting()-通过在需要调用检language,setting变量的函数开始加上"if(!checkSetting())return;"(参考global.js中setURL函数的用法)来保证对应函数执行时可调用系统变量setURL(prefix)-配合域名绑定模式和路由模式,智能处理页面内链接gotoAnchor(theAnchor)-滚动至对应的锚点ms_func_reg(function)-注册需要页面载入后运行的函数ms_func_run()-运行于所有页面载入之后的函数(框架自动在page_end处运行)对象方法扩展-针对String,Data,Number,Array等对象string.blen-返回某字符串的二进制长度string.trim-去除字符串首尾空字符string.printf-字符串赋值data.format-格式化日期(YYYY-MM-ddhh
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论