入门演示

演示准备

  1. 正式部署完成操作后, 根目录仅有include, index.php 和 license.txt
  2. 在index.php同级分别创建 model view ctrl 文件夹, 形成一个MVC架构模式
  3. 当然也可以使用其它模式
  4. 访问时, 控制层类名不是"serv"和"of"开头的, 默认会开启session, 详见 框架配置_of.session.autoStart框架会话

Hello World 一个面向过程的小脚本

创建入口文件 /test.php 文件

<?php
/**
 * 描述 : 入口文件, 支持面向过程开发
 */
//框架唯一入口
require dirname(__FILE__) . '/include/of/of.php';

//调用文本封装生成唯一值
echo of_base_com_str::uniqid(), "<br>\n";
//调用快捷方法查询SQL语句
print_r(L::sql('SELECT 1'));

运行 /test.php 结果如下

fe6583ee08684d9587bac3b5b564f883
Array ( [0] => Array ( [1] => 1 ) )

常规演示 中小系统推荐使用

创建模型层 /model/test.php

<?php
/**
 * 模型层, 类的命名方式 规范注意第4条
 */
class model_test {
    /**
     * 描述 : 返回传递前端的参数
     */
    public static function argv() {
        return '后台参数传递到视图层';
    }
}

创建控制层 /ctrl/test.php 文件

<?php
/**
 * 控制层
 */
class ctrl_test extends L {                                 //L内提供了快速访问的方法,如数据库,语言包,组件等静态方法 继承后使用更方便
    /**
     * 描述 : 在入口文件中我们定义了默认请求方法为index
     */
    public function index() {                               //通过index.php?c=ctrl_test访问
        echo '这个默认的加载方法';
    }

    /**
     * 描述 : 使用视图层
     */
    public function view() {                                //通过index.php?c=ctrl_test&a=view访问
        $this->view->argA = model_test::argv();             //向视图层传递数据,没继承L,可以操作 of_view::inst() 返回的对象
        $this->view->argB = of_base_com_str::uniqid();      //生成唯一值
        $this->view->argC = '<input>';                      //属性不带下划线的会被编码
        $this->view->_argD = '<input>';                     //属性带下划线的不会被编码
        $this->display('/test.html');                       //加载视图模板,映射的方法是 of_view::display(模板路径)
    }
}
return true;                                                //安全校验,允许访问的文件返回值必须与控制层校验值相同

创建视图层 /view/test.html

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>使用模板引擎作为试图</title>
</head>
<body>
    <input _value="$this->argA" value="编译前">
    <input _value="$this->argB" value="唯一值">
    <!--<?
    echo $this->argC, $this->_argD;
    ?>-->
</body>
</html>

运行 /?c=ctrl_test&a=view 结果如下

<input>

命名空间 大型系统推荐使用

修改入口文件 /index.php

<?php
/**
 * 描述 : 控制层共享文件, 控制层文件与类名相同, 以$_GET['a']作为方法名(默认index)
 */
//加载核心
require dirname(__FILE__) . '/include/of/of.php';

//调度代码
if (isset($_GET['c'])) {
    //类名, 动作, 安全校验
    $result = of::dispatch(
        strtr($_GET['c'], '_', '\\'),                               //改成使用命名方式调用
        isset($_GET['a']) ? $_GET['a'] : 'index',
        PHP_SAPI === 'cli' ? null : true
    );
    //返回数组转成json
    if (is_array($result)) echo \of\base\com\data::json($result);   //依然可以是 of_base_com_data 方式调用
}

创建模型层 /model/test.php

<?php
namespace model;
/**
 * 模型层
 */
class test {
    /**
     * 描述 : 返回传递前端的参数
     */
    public static function argv() {
        return '后台参数传递到视图层';
    }
}

创建控制层 /ctrl/test.php 文件

<?php
namespace ctrl;
use of\base\com\str;

/**
 * 控制层
 */
class test extends \L {                                    //L是根命名空间, 故需要用"\"
    /**
     * 描述 : 定义的默认请求方法为index
     */
    public function index() {
        echo '这个默认的加载方法';
    }

    /**
     * 描述 : 使用视图层
     */
    public function view() {
        $this->view->argA = \model\test::argv();
        $this->view->argB = str::uniqid();
        $this->display('/test.html');
    }
}
return true;

创建视图层 /view/test.html

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>使用模板引擎作为试图</title>
</head>
<body>
    <input _value="$this->argA" value="编译前">
    <input _value="$this->argB" value="唯一值">
</body>
</html>

运行 /?c=ctrl_test&a=view 结果如下