应用前台开发
应用所有前台操作代码都写在 应用唯一标识.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'}-->
 加载中,请稍侯......
      
评论