InitPHP (A PHP Framework) 用户手册
第6章 6.1 全局api
目录
1. InitPHP::acl($config = array()) 权限控制函数

接口描述:

框架访问控制,可以根据用户自定义的$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();
}
2. $this->getLibrary($class) 扩展库类加载

接口描述:

该函数最终经过$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();
}
3. $this->getUtil($class) 工具库类加载

接口描述:

该函数最终经过$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();
}
4. $this->getA() 获取a参数

接口描述:

获取URL路由中的a参数。全局使用,在Dao Service 和Controller中都可以使用该API

使用:

public function run() {
	$this->getA();
}
5. $this->getC() 获取c参数

接口描述:

获取URL路由中的c参数。全局使用,在Dao Service 和Controller中都可以使用该API

使用:

public function run() {
	$this->getC();
}
6. $this->getCache() 调用缓存类

接口描述:

缓存模型属于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();
}
7. InitPHP::getConfig() 获取配置文件

接口描述:

获取配置文件。不建议经常调用此函数,或者直接打印出配置文件数据。全局使用,在Dao Service 和Controller中都可以使用该API。

使用:

class indexController extends Controller {
	
	public $initphp_list = array('test'); 
	
	public function run() {
		$config =  InitPHP::getConfig();
		$this->view->display();
	}
}
8. InitPHP::getController() 调用Controller类

接口描述:

一般不建议采用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';
	}

}
9. InitPHP::getDao($daoname, $path = '') 调用DAO类

接口描述:

在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');
	}
	
}
10. $this->getM() 获取m参数

接口描述:

获取URL路由中m参数。全局使用,在Dao Service 和Controller中都可以使用该API

使用:

class indexController extends Controller {
	
	public $initphp_list = array('test'); 
	
	public function run() {
		$this->getM();
	}

}
11. $this->getMongo() 调用Mongo类

接口描述:

使用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() {}

}
12. $this->getNosql() 调用NOSQL对象类

接口描述:

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() {}

}
13. $this->getRedis() 调用Redis类

接口描述:

使用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->getRedis('serv0')->get("Hello"); //获取数据
	}
	
	public function test() {}

}
14. InitPHP::getService($servicename, $path = '') 调用Service类

接口描述:

在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');
	}

}
15. InitPHP::getTime() 获取时间

接口描述:

获取时间函数,单例。全局使用,在Dao Service 和Controller中都可以使用该API。

使用:

InitPHP::getTime(); 
16. InitPHP::hook($hookname, $data = '') 框架hook插件机制

接口描述:

可以在你项目中暂时不需要开发这个模块,但是后期可能会有很多扩展的地方放置一个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; } }
17. InitPHP::import($filename, array $pathArr = array()) 导入PHP文件函数

接口描述:

根据相对路径导入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();
}
18. InitPHP::init() 框架初始化

接口描述:

在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(); //框架初始化
19. $this->load($class_name, $type) 框架全局加载接口

接口描述:

框架总体结构主要包括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
19. InitPHP::loadclass($classname, $force = false) 实例化一个类

接口描述:

实例化一个类,单例模式,如果需要强制实例化,可以将$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();
}
20. InitPHP::output($string, $type = 'encode') 输出HTML过滤

接口描述:

对于PHP输出到页面上有HTML代码的变量,可以使用该函数进行过滤,防止XSS攻击。该函数可以将HTML代码转义,也可以还原转义的HTML。可以在模板中使用。全局使用,在Dao Service 和Controller中都可以使用该API。

参数:

参数 类型 是否必须 描述
$string String 输出过滤的字符串
$type String encode-转义,decode-反转义,默认 encode

使用:

InitPHP::output("<div></div>"); 
21. $this->register_global($name, $value) 注册全局变量

接口描述:

注册全局变量函数。注册全局变量后,可以直接使用$this->$name方法访问变量。全局使用,在Dao Service 和Controller中都可以使用该API

参数:

参数 类型 是否必须 描述
$name String 变量名称
$value String|Array|Int|Obj 全局变量值,可以字符串,数组,整型,对象等等。

使用:

$this->register_global('title', 'InitPHP开源框架'); 
22. InitPHP::url($action, $params = array(), $baseUrl = '') URL转换函数

接口描述:

网页上的站点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))
23. InitPHP::cli_init() 命令行模式运行php

接口描述:

命令行模式运行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); //框架初始化 
24. InitPHP::getLibrarys($className) 调用框架扩展库类

接口描述:

可以直接调用框架扩展库类(框架的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");
	}
24. InitPHP::getUtils($className) 调用框架工具库类

接口描述:

可以直接调用框架工具库类(框架的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");
	}
25. InitPHP::rpc_init() 启动RPC服务

接口描述:

启动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服务
26. InitPHP::getRemoteService() RPC调用远程的Service

接口描述:

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();
}
27. InitPHP::log() 记录日志

接口描述:

记录日志信息。

参数:

参数 类型 是否必须 描述
$message String 错误信息
$log_type String 日志类型 ERROR WARN DEBUG IN

使用:

InitPHP::log("Controller is not found", ERROR);
28. InitPHP::registerAutoloader() 注册全局变量

接口描述:

注册全局变量。

参数:

参数 类型 是否必须 描述
$callback String 回调方法

使用:

InitPHP::registerAutoloader("test");