应用前台开发
应用所有前台操作代码都写在 应用唯一标识.app.php
请求链接为:应用唯一标识.php?do=执行的操作&其它参数
例:
文章应用 article.app.php
链接:article.php?id=1
请求方法:do_iCMS
警告:所有用户提交参数,所有可请求链接参数,都必须过滤后才可以继续其它操作 系统默认所有$_GET,$_POST都进行了`addslashes`处理,但是这样还是不够的 推荐 整数形加(int), 字符串最基本也要使用htmlspecialchars()或者使用系统iSecurity::escapeStr()处理 其它类型自行处理
<?php
class 应用唯一标识App{
//允许用URL访问的方法,仅限于do_,API_,ACTION_开头类的方法,默认需要有一个'iCMS'
//无需填写do_,API_,ACTION_开头
public $methods = array('iCMS','允许访问方法名','执行的操作');
public function __construct() {}
/**
* [无do请求参数下,默认访问这个方法]
*/
public function do_iCMS(){
}
/**
* [do类方法主要用于处理来自 (应用唯一标识.php?do=执行的操作) 的GET请求]
*/
public function do_执行的操作(){
/*可正常使用$_GET,$_POST之类PHP原生代码接收提交的数据*/
$id = (int)$_GET['id'];
$name = iSecurity::escapeStr($_POST['name']);
}
/**
* [API类方法主要用于处理来自api.php?app=应用唯一标识&do=执行的操作 的GET请求]
*/
public function API_执行的操作(){
/*可正常使用$_GET,$_POST之类PHP原生代码接收提交的数据*/
$id = (int)$_GET['id'];
$name = iSecurity::escapeStr($_POST['name']);
}
/**
* [ACTION类方法主要用于POST请求]
*/
public function ACTION_执行的操作(){
/*可正常使用$_POST之类PHP原生代码接收提交的数据*/
$id = (int)$_POST['id'];
$name = iSecurity::escapeStr($_POST['name']);
}
}
?>
注:本来应以文章应用
为示例,但是发现文章应用
已经更新为统一标准应用模式,使用继承appsApp
的方法,在这里不适合用来做示例
以用户应用为例 user.app.php
用户登陆页,请求链接为:user.php?do=login
,对应方法do_login
但是用户应用采用的是以api.php
为链接的模式
所以请求链接为:api.php?app=user&do=login
,对应方法API_login
<?php
class userApp{
public $methods = array('iCMS', 'login');
public $config = array();
public function __construct() {
//获取用户应用配置
$this->config = iCMS::$config['user'];
}
/**
* [用户登陆]
*/
public function do_login(){
/*......*/
/*用户访问登陆页面执行的相关代码*/
/*......*/
/*读取模板*/
iView::display('iCMS://user/login.htm');
}
/**
* [功能作用与do_login是一致的,一般出于兼容做法,可直接在这个方法里调用do_login,也可以另外编不一样的代码]
*/
public function API_login() {
$this->do_login();
}
/**
* [在登陆页面用户提交登陆操作执行的方法]
*/
public function ACTION_login() {
/*用户执行登陆时的相关代码*/
/*可根据页面使用的提交方法,返回相关类形数据*/
/*如:AJAX,可返回json*/
if(登陆成功){
iUI::code(1, 0, $this->forward, 'json');
}else{
iUI::code(0, 'user:login:error', 'uname', 'json');
}
}
/**
* [其它方法]
* 遵循PHP类方法编写规则就行
*/
public function openid() {
}
}
?>
那么问题来了,我想要在用户应用二次开发,要怎么把代码,请求链接添加到应用呢?
二次开发
新增代码的两种方式:
1.直接在user.app.php
添加代码
不推荐使用此方式,因为如果官方更新用户应用的相关代码会把您添加代码覆盖掉,不过放心升级时系统会自动对代码进行备份.更新完成后自行在对比添加下就可以了
<?php
class userApp{
//这里一定要追加,不然就无法访问
public $methods = array('ooxx');
/**
* [二次开发]
*/
public function do_ooxx() {
/*代码*/
}
/**
* [二次开发]
*/
public function API_ooxx() {
/*代码*/
}
?>
因为访问链接不一样,可以实现不一样功能,自行决定
2.使用内部方法重写方式
所有应用支持将xxx.app.php内部方法重写
api请求API_xxx.app.php
<?php
//继承 articleApp
class API_articleApp extends articleApp {
public function __construct() {
parent::__construct();
//追加允许访问方法
array_push($this->methods, "aaaa");
}
//对API_hits方法二次开发
public function API_hits($id = null) {
var_dump($_GET);
}
//新增功能
public function API_aaaa($id = null) {
var_dump($_GET);
}
}
?>
action请求ACTION_xxx.app.php,
<?php
//继承 articleApp
class ACTION_articleApp extends articleApp {
//对ACTION_vote方法二次开发
public function ACTION_vote() {
var_dump($_POST);
}
}
?>
其它请求DO_xxx.app.php
<?php
//继承 articleApp
class DO_articleApp extends articleApp {
//对article方法二次开发
public function article(){
//...code
}
}
?>
等三种方式重写,二次开发将不在受官方更新影响
配置前端路由
代码是解决了,但是我现在要怎么访问,链接是什么,怎么在模板里调用等等
开发前我们在基本介绍里说过所有应用都要在后台应用管理添加.
具体请见 为应用配置前端路由
看完后我们就刚才API_articleApp
添加的代码,如何配置路由的,其它的类同,
ACTION_articleApp
不用配置一般提交到api.php
记得带上app
数据就可以了
示例新功能aaaa
{
"article:aaaa": [
"/article/aaaa",
"api.php?app=article&do=aaaa"//因为方法是城API类型
//"article.php?do=aaaa" //如果方法是do_aaaa 使用这个
]
}
PHP中调用方式
<?php
iURL::router('article:aaaa');
?>
模板中调用方式
<!--{iCMS:router url='article:aaaa'}-->
评论