框架访问控制,可以根据用户自定义的$config,来控制用户访问的权限。主要对框架的3个URL参数进行控制,m、c、a。全局使用,在Dao Service 和Controller中都可以使用该API
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $config | String | 是 | 权限控制参数,允许访问的权限。如果为空,则具备全局权限 |
public function run() {
$config = array('user' => array('get', 'list')); //具备获取用户列表和用户详情
if (!InitPHP::acl($config)) exit('没有权限访问');
$this->view->display();
}
该函数最终经过$this->load()去加载框架扩展库中的类文件 。将需要调用的框架扩展库中的类名做为$class名称参数传输(不需要带Init类名称后缀)就可以使用扩展库类了 。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $class | String | 是 | 需要调用的扩展库类名称,不需要Init后缀 |
public function run() {
$function = $this->getLibrary('function'); //调用library/function.init.php
echo $function->get_rand('abc', 10); //获取随机数
echo $function->str_code('InitPHP2.1', '123456', $type = 'ENCODE'); //加密
echo $function->str_code('LF1cQTZ7NFBMBQ==', '123456', 'DECODE'); //解密
echo $function->bitsize(100); //M MB单位转换
$this->view->display();
}
该函数最终经过$this->load()去加载框架工具库中的类文件。将需要调用的框架工具库中的类名做为$class名称参数传输(不需要带Init类名称后缀)就可以使用工具库函数 。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $class | String | 是 | 需要调用的工具库类名称,不需要Init后缀 |
public function run() {
$cookie = $this->getUtil('cookie'); //获取cookieInit类对象,core/util/cookie.init.php
$cookie->set('test', 'InitPHP 2.1'); //设置COOKIE
$cookie_val = $cookie->get('test');//获取cookie值
echo $cookie_val;
$this->view->display();
}
获取URL路由中的a参数。全局使用,在Dao Service 和Controller中都可以使用该API
public function run() {
$this->getA();
}
获取URL路由中的c参数。全局使用,在Dao Service 和Controller中都可以使用该API
public function run() {
$this->getC();
}
缓存模型属于DAO(数据操作层)模块,在DAO中直接使用$this->cache就可以使用缓存了。因为各种业务需求,缓存可能会部署在Controller层,也有可能部署在Service层,这个时候我们提供了这个$this->getCache()全局方法来供大家调用。调用该函数后,就直接可以使用缓存的函数了。该函数也是最终通过$this->load函数加载DAO中的缓存模块来实现(具体可以看下这个函数)。全局使用,在Dao Service 和Controller中都可以使用该API。
public function run() {
$this->getCache()->set("Hello", "1111111111111", 3, 'MEM'); //设置一个memcache类型的缓存
echo $this->getCache()->get("Hello", 'MEM'); //获取缓存数据
$this->view->assign("hello", array('username' => 'sadasd'));
$this->view->set_tpl("index_run");
$this->view->display();
}
获取配置文件。不建议经常调用此函数,或者直接打印出配置文件数据。全局使用,在Dao Service 和Controller中都可以使用该API。
class indexController extends Controller {
public $initphp_list = array('test');
public function run() {
$config = InitPHP::getConfig();
$this->view->display();
}
}
一般不建议采用Controller调用另外一个Controller中的方法。该函数可以用于接口聚集,将各种接口聚集到一个接口中使用。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $controllerName | String | 是 | 控制器名称 |
| $functionName | String | 是 | 方法名称 |
| $params | String | 是 | 函数参数 |
| $controllerPath | String | 是 | 控制器文件夹名称,例如在控制器文件夹目录中,还有一层目录,user/则,该参数需要填写 |
class indexController extends Controller {
public $initphp_list = array('test'); //Action白名单
public function run() {
InitPHP::getController("userController", "run", array(), 'user');
}
public function test() {
echo 'asdasd';
}
}
在Service中需要调用Dao,该函数能直接调用Dao。$daoname不需要填写Dao的后缀名。$path根据不同的文件夹分类,可以调用不同文件夹下的Dao类。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $daoname | String | 是 | Dao名称,不需要Dao后缀名 |
| $path | String | 否 | 路径,例如Dao文件夹下需要分各种文件夹,user/,product/,则直接使用'user' |
/**
* 后台日志服务
*/
class AdminLogService extends BaseService {
/**
* 新增日志
* 参数结构
* array(
* 'username' => 用户名称
* 'ip'=> 来源IP地址
* 'controller' => c
* 'action' => a
* 'msg' => msg信息
* 'data' => 参数
* )
* @param array $data
*/
public function addLog($data) {
$data = $this->_cookLogData($data);
$data['update_time'] = InitPHP::getTime();
return $this->_getAdminLogDao()->add($data);
}
/**
* 日志DAO
* @return AdminLogDao
*/
private function _getAdminLogDao() {
return InitPHP::getDao('AdminLog', 'admin');
}
}
获取URL路由中m参数。全局使用,在Dao Service 和Controller中都可以使用该API
class indexController extends Controller {
public $initphp_list = array('test');
public function run() {
$this->getM();
}
}
使用Mongo你需要在你的服务器上配置你的Mongo服务。您还需要配置您的Mongo参数$InitPHP_conf['mongo']。该接口支持多Mongo服务器连接,您只需要$InitPHP_conf['mongo']['default']如这个default的key,只在在使用$this->getMongo('default')就可以达到调用不同Mongo服务器的功能。全局使用,在Dao Service 和Controller中都可以使用该API。
class indexController extends Controller {
public $initphp_list = array('test'); //Action白名单
public function run() {
$this->getMongo()->selectCollection("user");
$this->getMongo()->insert(array('username' => 'asdasd', 'password' => '123456'));
}
public function test() {}
}
Nosql模型默认属于DAO(数据操作层)。因为考虑到数据操作层Nosql使用普遍会少一些,所以调用Nosql时候,在Dao中不能直接使用$this->nosql来调用(如果需要使用,可以修改Dao基类)。该函数直接获取Nosql工厂对象,需要具体使用Redis或者Mongodb则需要调用init()函数来初始化使用的Nosql类型。一般情况下不建议使用该函数,因为我们封装了$this->getRedis()和$this->getMongo()方法,让大家直接调用对应的nosql。全局使用,在Dao Service 和Controller中都可以使用该API。
class indexController extends Controller {
public $initphp_list = array('test'); //Action白名单
public function run() {
$this->getNosql()->init('REDIS')->set("val", "Hello World"); //调用Redis方法
}
public function test() {}
}
使用Redis你需要在你的服务器上配置你的Redis服务。您还需要配置您的Redis参数$InitPHP_conf['redis']。该接口支持多Redis服务器连接,您只需要$InitPHP_conf['redis']['default']如这个default的key,只在在使用$this->getRedis('default')就可以达到调用不同Redis服务器的功能。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $key | String | 是 | 设置键名称 |
| $value | String | 是 | 设置值 |
| $timeOut | Int | 否 | 失效时间 |
class indexController extends Controller {
public $initphp_list = array('test'); //Action白名单
public function run() {
$this->getRedis('serv0')->set("Hello", "1111111111111", 3); //设置一个时间为3秒的值
echo $this->getCache('serv0')->get("Hello"); //获取数据
}
public function test() {}
}
在Controller中需要调用Service,该函数能直接调用Service。$servicename不需要填写Service的后缀名。$path根据不同的文件夹分类,可以调用不同文件夹下的Service类。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $servicename | String | 是 | Service名称,不需要后缀名 |
| $path | String | 否 | 路径,例如Service文件夹下需要分各种文件夹,user/,product/,则直接使用'user' |
/**
* 站点基本设置
* @author administrator
*/
class siteController extends BaseAdminController {
public $initphp_list = array('editdo'); //Action白名单
private $key = 'site_basic_config'; //配置表 键名称
/**
* 网站基本配置
*/
public function run() {
$siteInfo = $this->_getConfService()->getConfig($this->key);
$this->view->assign('siteInfo', $siteInfo);
$this->view->set_tpl('site/site_run');
}
/**
* 网站基本配置更新
*/
public function editdo() {
$siteInfo = $this->controller->get_gp('site');
$result = $this->_getConfService()->updateConfig($this->key, $siteInfo);
if (!$result) $this->ajax_return(0, '更新失败!');
$this->ajax_return(1, '更新成功!');
}
/**
* 前置操作
*/
public function before() {
parent::before();
$this->view->assign('siteRun', $this->getUrl('site', 'run'));
$this->view->assign('siteEditdo', $this->getUrl('site', 'editdo'));
}
/**
* @return ConfService
*/
private function _getConfService() {
return InitPHP::getService('Conf', 'conf');
}
}
获取时间函数,单例。全局使用,在Dao Service 和Controller中都可以使用该API。
InitPHP::getTime();
可以在你项目中暂时不需要开发这个模块,但是后期可能会有很多扩展的地方放置一个hook,方便后期扩展。插件机制需要配置配置文件中的$InitPHP_conf['hook']使用。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $hookname | String | 是 | 钩子名称 |
| $data | Array | 否 | 传递参数 |
class indexController extends Controller {
public $initphp_list = array('test');
public function run() {
InitPHP::hook('guest', array('uid'=>100, 'username'=>'init')); //放置一个挂钩
$this->view->display();
}
public function test() {
echo 'Hello World';
}
/**
* @return testService
*/
private function getTestService() {
return InitPHP::getService('test','test');
}
}
//hook.conf.php 插件配置文件
/*
* 钩子名称 => array(array('挂钩上对应的类名称', '函数名称')) 一个挂钩多个函数
* 钩子名称 => array(挂钩上对应的类名称,函数名称) //一个挂钩一个钩子函数
*/
return array(
//guest挂钩,InitPHP::hook('guest','Hook'); 在程序中放置钩子,guest钩子名称,Hook传递的参数
'guest' => array(
array('test', 'run'),
array('test', 'aa')
)
);
//插件具体实现- test.conf.php
//一个测试的钩子
class testHook {
public function run($data) {
echo '第一个简单的' . $data;
}
public function aa($data) {
echo '
第二个简单的' . $data;
}
}
根据相对路径导入PHP文件,可以导入单个文件,也可以在不知道文件夹的情况下,搜索文件目录 。全局使用,在Dao Service 和Controller中都可以使用该API
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $filename | String | 是 | 需要导入的文件名称,可包含路劲 |
| $pathArr | Array | 否 | 在不清楚路劲的情况下可以自动搜索 |
public function run() {
InitPHP::import('library/helper/test.php'); //导入library/helper/test.php文件
$test = InitPHP::loadclass('test'); //实例化test类
$test->tt(); //调用函数
$this->view->display();
}
在index.php入口文件中使用,运行框架。有在框架运行的时候才会用到,一般情况下不需要使用 。
define("APP_PATH",dirname(__FILE__));
header("Content-Type:text/html; charset=utf-8");
require_once('../initphp/initphp.php'); //导入配置文件-必须载入
require_once('conf/config.php'); //导入配置文件-必须载入
InitPHP::init(); //框架初始化
框架总体结构主要包括7个部分:框架运行类init/、Controller、DAO、Service、View、Util和Library,所有这些类的出口都需要经过$this->load()这个函数。一般情况下,框架内部已经封装好调用的具体接口,例如:$this->controller->get_gp() 。有特殊的情况才会用到该函数,但是使用者必须了解,你所有用的API都是经过这个接口出去的。单例模式 。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $class_name | String | 是 | 需要调用框架内部类的类名,例如:Controller |
| $type | String | 是 | 调用不同的类型(c,s,v,d,u,l),包含:Controller,Service,View,Dao,Util,Library中的类文件 |
$this->load('controller', 'c'); //导入Controller
$this->load('view', 'v'); //导入View
$this->load('service', 's'); //导入Service
$this->load('dao', 'd'); //导入DAO
实例化一个类,单例模式,如果需要强制实例化,可以将$force参数设置为true。全局使用,在Dao Service 和Controller中都可以使用该API
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $classname | String | 是 | 需要实例化的类名称 |
| $force | Bool | 否 | 是否强制实例化 |
public function run() {
InitPHP::import('library/helper/test.php'); //导入library/helper/test.php文件
$test = InitPHP::loadclass('test'); //实例化test类
$test->tt(); //调用函数
$this->view->display();
}
对于PHP输出到页面上有HTML代码的变量,可以使用该函数进行过滤,防止XSS攻击。该函数可以将HTML代码转义,也可以还原转义的HTML。可以在模板中使用。全局使用,在Dao Service 和Controller中都可以使用该API。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $string | String | 是 | 输出过滤的字符串 |
| $type | String | 是 | encode-转义,decode-反转义,默认 encode |
InitPHP::output("<div></div>");
注册全局变量函数。注册全局变量后,可以直接使用$this->$name方法访问变量。全局使用,在Dao Service 和Controller中都可以使用该API
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $name | String | 是 | 变量名称 |
| $value | String|Array|Int|Obj | 是 | 全局变量值,可以字符串,数组,整型,对象等等。 |
$this->register_global('title', 'InitPHP开源框架');
网页上的站点URL都需要经过该函数进行转化,可以输出默认模式,rewrite模式,path模式的路径。全局使用,在Dao Service 和Controller中都可以使用该API
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $action | String | 是 | m,c,a参数,一般写成 cms|user|add 这样的m|c|a结构 |
| $params | Array | 否 | 参数 |
| $baseUrl | String | 否 | BaseUrl ,不填写,则走配置文件中的BaseUrl |
InitPHP::url('user|delete', array('id' => 100))
命令行模式运行php,在linux的Crontab中直接调用计划任务的入口文件就可以走这个接口, 例如:php index.php user add
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $argv | Array | 是 | 命令行参数数组 |
define("APP_PATH", "../app/");
header("Content-Type:text/html; charset=utf-8");
require_once('../../../initphp/initphp.php'); //导入配置文件-必须载入
require_once(APP_PATH . 'conf/comm.conf.php'); //公用配置
InitPHP::cli_init($argv); //框架初始化
可以直接调用框架扩展库类(框架的library中的类)。$className不需要填写扩展库的后缀名"Init"。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $className | String | 是 | 框架扩展库类名称,不带"Init"后缀 |
public function run() {
$curl = InitPHP::getLibrarys("curl"); //调用curl类
$curl->get("http://www.baidu.com"); //调用CURL
$this->view->display("index/run");
}
可以直接调用框架工具库类(框架的util中的类)。$className不需要填写工具库的后缀名"Init"。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $className | String | 是 | 框架工具库类名称,不带"Init"后缀 |
public function run() {
$queue = InitPHP::getUtils("queue");
$queue->set("100");
$queue->set("200");
$queue->set("300");
echo $queue->get();
echo $queue->get();
$this->view->display("index/run");
}
启动RPC服务。如果你的业务需要对外提供你的Service层的RPC调用服务,则需要调用这个方法,初始化RPC服务。
具体参见 RPC调用 这一章节
define("APP_PATH", "../app/");
header("Content-Type:text/html; charset=utf-8");
require_once('../../initphp/initphp.php'); //导入配置文件-必须载入
require_once(APP_PATH . 'conf/comm.conf.php'); //公用配置
InitPHP::rpc_init(); //提供RPC服务
InitPHP提供的RPC调用服务是基于HTTP的,所以getRemoteService方法是通过CURL去调用
具体参见 RPC调用 这一章节
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $class | String | 是 | Service的类名称,不带后缀(“Service”) |
| $method | String | 是 | 方法名称 |
| $args | Array | 是 | 参数数组,如果不需要传递参数,则传递空数组 |
| $group | String | 否 | 业务分组名称,默认default。 |
| $path | String | 否 | Service文件夹路径,如果没有则为空。 |
| $timeout | String | 否 | RPC调用超时时间,默认5秒。 |
try {
//调用RPC服务。调用userService中的getUserInfo方法,参数是:array("我是神TEST", "10")
//具体参见InitPHP::getRemoteService
$ret = InitPHP::getRemoteService("user", "getUserInfo", array("我是神TEST", "10"));
print_r($ret);
} catch (exceptionInit $e) {
//服务调用异常
echo "Exection:[" . $e->getCode(). "]".$e->getMessage();
} catch (Exception $e) {
//业务异常
echo "Exection:[" . $e->getCode(). "]".$e->getMessage();
}
记录日志信息。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $message | String | 是 | 错误信息 |
| $log_type | String | 否 | 日志类型 ERROR WARN DEBUG IN |
InitPHP::log("Controller is not found", ERROR);
注册全局变量。
| 参数 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| $callback | String | 是 | 回调方法 |
InitPHP::registerAutoloader("test");