控制核心
文章分页:

核心类包括 myController类myStep类,其中后者为前者的扩展,主要用于联通各类核心类模块,控制各类页面元素的生成与输出。主要包括以下功能:

主要功能

关联引用
  • regClass($setting) - 设定自动载入功能类的规则,实现随用随载,降低系统无意义开销,其中 $setting 的格式为:
    array (  
        0 =>  
            array (  
                'path' => '/path/to/MyStepFW/lib/',  
                'ext' => '.php,.class.php',  
                'idx' =>  
                    array (  
                        'interface_plugin' => '../plugin/interface_plugin.class.php',  
                    ),  
            ), 
    );
    可以设置多组,每组包括载入路径 path,载入扩展名 ext,特殊载入规则 idx(在类文件路径、扩展名或文件名不符合标准的情况下使用,格式为“调用名=>相对于path的类文件路径”)
  • setAlias($list) - 设定功能类的别名,可以给一个长名称类设定一个短名称,默认如下:
    array (  
      'myApi' => 'api',  
      'myCache' => 'cache',  
      'myConfig' => 'cfg',  
      'myController' => 'c',  
      'myDb' => 'db',  
      'myEmail' => 'mail',  
      'myEncrypt' => 'enc',  
      'myExcel' => 'xls',  
      'myFile' => 'f',  
      'myImg' => 'img',  
      'myMinify' => 'mini',  
      'myReflection' => 'err',  
      'myReq' => 'r',  
      'myRouter' => 'router',  
      'myString' => 's',  
      'myTemplate' => 'tpl',  
      'myUploader' => 'ul',  
      'myZip' => 'zip',  
    );
  • 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() )的初始化
    // 文件位置 vender/dirName/fileName.php(.class.php) -> 执行效果 new /ns/className($para1, $para2)  
    $myInstance = myStep::vendor([  
        'dir' => 'dirName',  
        'file' => 'fileName',  
        'class' => 'className',  
        'namespace' => '/ns/',  
    ], $para1, $para2);  
    // 文件位置 vender/className/className.php(.class.php) -> 执行效果 new className($para1, $para2)   $myInstance = myStep::vendor($className, $para1, $para2);

 

页面内容

与模版类结合,转意或扩充相关功能

  • setAddedContent($position, $content) - 以 $position 为关键字,添加超文本内容,可多次累加添加;
  • pushAddedContent(myTemplate $tpl) - 将已添加的相关内容替换到页面模版的 page_$position 变量标签;
  • regTag($tag_name, $tag_func) - 为模版类注册名为 $tag_name 的扩展标签,并指定处理方法为 $tag_func。
页面脚本

用户控制页面样式表及Javascript脚本代码,调用功能类压缩一次性输出,并通过etag缓存标志优化网络处理

addCSS($code) 和 addJS($code) - 添加脚本代码或脚本文件,并更新最后更改日期;

removeCSS($idx) 和 removeJS($idx) - 移除相关脚本;

clearCSS() 和 clearJS() - 移除所有脚本;

CSS($cache) 和 JS($cache) - 判断缓存文件$cache是否存在且生成时间晚于添加时所记录的最后更改日期,如条件满足则直接显示,否则将已添加的代码合并、压缩并存入缓存文件。

语言文件

通过语言包的设置,可快速在多种语言间切换

  • setLanguage($language, $charset) - 将一组语言数组 $language 添加到框架内,$language 的格式为以索引为下标,语言内容为值的数组;
  • setLanguagePack($dir, $lng, $charset) - 将指定目录 $dir 下的指定语言包 $lng 添加到框架内,文件 "{$dir}/{$lng}.php" 为返回标准 $language 数组;
  • getLanguage($idx) - 从已添加的语言数组中获取下标为 $idx 的子项值。

通过语言函数与模版变量功能相结合,框架系统可以根据设置的语种自动将模版中类似 <!--lng_[idx]--> 的标签替换为对应 [idx] 索引的文字。

应用接口

通过控制类调用接口类的相关方法

  • regApi($name, $method) - 调用API类,注册名为 $name 的 API 的处理方法为 $method ;
  • runApi($name, $para, $return) - 执行注册名为 $name 的应用接口,并传入 $para 参数数组,并规定返回结果的格式为 $return ;
  • api($para) - 根据路径信息 $para (含应用、接口名、返回值格式等信息,具体可参考应用接口),执行对应的 API 接口功能。
脚本接口

为便于浏览器端调用后台设置,框架设置了如下Javascript脚本接口,各位为json代码转换的对象变量

  • language($app_name, $type) - 按照系统设置返回对应应用 $app_name 的语言包,可通过 language.idx 的方式在JS脚本中调用(idx为语言索引)
  • setting($app_name) - 返回对应应用 $app_name 的设置信息,可通过 setting.idx 的方式在JS脚本中调用(idx为语言索引),设置信息并非全部,内容如下:
    • language - 当前语种
    • debug - 是否开启测试模式
    • app - 当前应用索引名
    • path_root - 框架相对网站根目录的路径
    • path_app - 当前应用所在路径(用于调用静态文件)
    • url_fix - 如绑定了域名,当前路径相对于未绑定状态下的修正
插件模块

插件用于给应用添加某一特定功能,其具体内容将在后文详述

  • regPlugin($plugin, &$info) - 引用位于 $plugin 目录的插件,并将插件信息导入 $info 变量;
  • plugin() - 执行已注册的所有插件功能。

模块是通过插件添加的交互页面

  • regModule($module, $page) - 注册名为 $module 的模块所对应的脚本页面为 $page(含完整PHP脚本路径);
  • module($path) - 根据路径参数 $path(含应用、模块名、参数等信息)显示结果页面
自定义链接

按照某一规则生成目标格式的链接

  • regUrl($mode, $func) - 注册某一链接生成规则 $mode 的处理方法为 $func
  • url($mode) - 依照 $mode 规则生成链接,其中可以给方法添加 $mode 以外的参数,并将依次传递给对应的处理方法
编辑器扩展

针对tinyMCE富文本编辑器,用于扩充其功能,来增加所编辑内容的丰富程度

  • editorSetPlugin($code, $btn) - 为编辑器添加功能扩展代码 $code(可为脚本文件,必选),以及其对应的按钮名称 $btn(可选)
  • editorGetPlugin() - 判断缓存文件是否存在,如存在直接读取,否则根据已添加的信息生成缓存脚本
用户账户

用户账户管理接口,本系列方法可根据需要在应用核心类中扩展

regLog($login, $logout, $chg_psw) - 用于设置用户登录、退出和更改密码的方法;

login(&$usr, $pwd) - 判断用户$usr,密码$pwd 是否与系统操作员账户相符,如未传入参数则自动读取cookie信息,成功登录后将设定相关session;

logout() - 退出登录,移除cookie和session;

chg_psw($id, $psw_org, $psw_new) - 验证 $id 用户的现有密码 $psw_org 无误后,更新为新密码 $psw_new。

checkPower($idx) - 检查当前用户是否拥有 $idx 权限。

附件管理

框架统一提供了附件上传、下载和删除的接口,具体方法如下:

upload() - 上传文件,对应 /api/myStep/upload 接口,上传文件保存在常量FILE目录

download($idx) - 下载文件,对应 /api/myStep/download/[any] 接口,[any]为文件索引,即$idx

remove_ul($idx) - 删除文件,对应 /api/myStep/remove/[any] 接口,[any]为文件索引,即$idx

代码钩子

为便于应用在框架内部过程中挂载用户代码,以便于在固有流程下实现个性化处理。

  • setFunction($position, $func) - 在指定位置 $position 插入 $func 方法,其中默认的 $position 包括 start(框架执行开始之前),end(框架执行完成时),page(模版类生成页面时) 三个位置
  • run($position, $desc, $para) - 执行指定位置 $position 的钩子程序,$desc 为 false 时表示按照添加的逆序执行,$para 为传递给所有对应方法的参数(多个参数时按数组传递)
其他功能
  • getInstance($calledClass) - 可以通过本方法获取某一功能类的实例,同时为类实例设置方法别名和错误处理方法(myStep::info)
  • info($msg, $url) - 显示提示信息 $msg (可为语言索引),并在5秒后自动跳转到指定的链接 $url(如为空则返回上一页面)
  • redirect($url) - 跳转至指定 $url,如 $url 为空则退回到上一个页面,同时释放数据库和缓存实例
  • etag($etag, $expires) - 为当前页面调用设置etag标签,如在过期时间 $expires 内,则自动调用浏览器缓存,以减少服务器和网络开销
  • file($file, $name) - 下载指定文件 $file,并可以定制下载的文件名 $name
  • guid($para) - 以 $para 为标准字符串,生成唯一ID
  • header($idx, $para, $exit) - 发送指定HTTP响应头代码 $idx,并传输相关参数 $para(可选),如 $exit 为 true 则终止程序执行,如为404,403,500则通过 myStep::info 直接显示
  • setURL($url) - 传入框架rewrite路径,根据设置路径模式(path_info,query_string 或 rewrite) 返回对应的路径,但原则上不建议采用非 rewrite 模式
  • captcha($len, $scope) - 生成并显示验证码图片,参见系统路由
  • segment($str) - 获取指定字符串的分词结果(以逗号间隔,可用于文章关键字等)

 

核心功能

运行核心
  • init() - 静态方法,为框架的执行入口,包括以下操作:
    • 预初始化基本设置信息(如存在移植错误可自动调整)
    • 注册类加载自动模式
    • 设置网站根常量
    • 初始化错误捕获参数
    • 如为首次执行框架的话,将自动跳转到初始设置页面,否则转入go方法
  • go() - 框架执行入口,包括如下操作:
    • 引入全局设置信息
    • 进行域名绑定检测及通用性处理
    • 判断是否是可直接调用的静态文件
    • 加载应用设置信息,相同项将覆盖全局配置
    • 根据路由规则调用相关脚本
  • setPara() - 框架各类变量和参数的初始化,包括:
    • 声明框架核心类实例,自动调用应用目录下"应用名.class.php"文件中与应用同名的myStep扩展类,如不满足条件将转为调用myStep类,如存在则执行 preload 方法
    • 引用应用功能库文件 lib.php
    • 检测并生成的 CSS 和 JS 融合脚本文件
    • 生成对应模版类的初始设置和缓存设置
    • 调用start方法
  • getModule($m) - 自定义路由处理函数(也可以通过自定义方法处理自定义路由,详情参见"自定义路由"专题),机制如下:
    • 传入参数 $m - 本参数传递路由外的路径信息,如路由为 /route_path/[any],URI 为 /route_path/path1/path2,则 $m 为 path1/path2,即[any]部分,但需要注意的是在本方法中,$m 被截取为 path1。此参数可直接在自定义的路由处理脚本内调用,但如需在下级函数中调用,需要先进行global处理。
    • 本方法将通过 myStep::setPara 方法调用当前 app 设置中的模版参数设置(可继承于全局设置,存储于全局变量 $tpl_setting 中)
    • 本方法将按照如下顺序调用处理脚本(发现可用脚本后将立即调用并停止试探)
      • app路径/module/模版样式/$m.php($m 为输入参数)
      • app路径/module/模版样式/路由名称.php (如路由为 /route_path/[any],路由名称为 manager)
      • app路径/module/$m.php($m 为输入参数)
      • app路径/module/路由名称.php (如路由为 /route_path/[any],路由名称为 manager)
      • app路径/module/模版样式/index.php(模版样式为设置中对应的内容)
      • app路径/module/index.php
流程控制

本系列功能是控制所有框架下应用,在程序开始、页面生成和程序结束时实行相关的代码。

  • start() - 于页面开始时执行,包括一系列初始化设置
    • 功能类调用别名设定
    • 异常处理方式设定
    • 可用插件引入并执行
    • 数据库和缓存实例声明
    • cookie、session初始化设置
    • 用户登录判断
    • ob缓存设定
    • op缓存设定
    • 编码集设定
    • start钩子代码执行
  • show(myTemplate $tpl, $append_para) - 编译模版并直接显示,本方法主要用于主模版的最终显示
    • 将网站基本信息赋值给模版标签
    • 将扩展变量 $append_para 赋值给模版标签(可选)
    • 生成CSS和JS缓存文件,并引用至当前页面(通过 setAddedContent 方法)
    • 添加语言包
    • 注册扩展标签
  • render(myTemplate $tpl, $append_para) - 编译模版并返回编译代码,本方法主要用于子模版的代码生成并传递给主模版
    • 将扩展变量 $append_para 赋值给模版标签(可选)
    • 添加语言包
    • 注册扩展标签
  • end() - 终结程序,执行所有首尾脚本
    • 执行end钩子程序
    • 判断是否有扩展的shutdown方法并执行
    • 判断是否设置了 self::$goto_url ,如存在则执行页面跳转
    • 添加 tinyMCE 编辑器扩展
    • 计算数据库查询次数、脚本执行时间、内存使用情况
    • 释放数据库和缓存实例
    • 执行页面压缩并发送至客户端显示
  • checkCache(myTemplate $tpl) - 判断是否有编译缓存存在,如有则跳过编译步骤直接显示缓存内容,本方法直接用于主模版用于显示最终结果

 

上一篇:页面模版
下一篇:建立应用