参考yii开发的简易框架,基于MVC设计,结构清晰,有兴趣的人可以加入我们。
##目录结构
- config 配置项
- db.php 数据库配置
- main.php 主配置项
- params.php 全局参数设置项
- urlmanage Restful 配置
- framework 框架底层
- lib 外部类库
- modules 应用层(mvc)
- controllers 控制层
- models 模型层
- views 视图层
- layouts 布局
- web
- index.php 入口
与Yii类似,以 base::$app 来获取相应属性及操作对象,如:
base::$app->method 获取请求方式
base::$app->get 获取get方式参数
base::$app->put 获取put方式参数
base::$app->db 获取数据库操作对象 【这里没做太多处理,就是pdo对象,后期优化】
base::$app->params 获取全局定义参数
framework目录:
CWebApplication 应用主体
Connection.php 操作db基类,封装方法 insert、update、select、delete,复杂方法待补充
BaseModel.php 基础Model 基类
CRequest.php 请求解析
###Restful API
写在前面,restful 对url重写要求有点高,需要服务器做些处理,框架使用的是apache服务器,需要在web下添加 .htacess 文件,内容如下:
RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭
#如果不是真实存在的目录或文件,则分发请求给index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ index.php
其实就是将复杂的url,如localhost/user/10 分发给index.php处理;Nginx处理,需要在nginx.conf 中添加
location / {
...
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
config.php 添加
'rules' => [
#控制器 =》 配置
controllerId => [
'extraPatterns' => [
urlId => actionId, //参数获取id匹配原actionId
...
],
],
controllerId 代表控制器id,actionId 代表动作Id,urlId 代表url中表示actionId的参数,如:
...
'user' => [
'extraPatterns' => [
'index123' => 'index', //参数获取id匹配原actionId
...
],
],
...
localhost/user/index123 所指真实地址就是/user/index;
restful 以资源来定位,通过http动词来执行相应动作,主要:
GET /users: 逐页列出所有用户;
HEAD /users: 显示用户列表的概要信息;
POST /users: 创建一个新用户;
GET /users/123: 返回用户为 123 的详细信息;
PATCH /users/123 and PUT /users/123: 更新用户 123;
DELETE /users/123: 删除用户 123;
restful API 默认提供 create、delete、update、select、detail接口,需要一些处理下面会做详细说明,实际使用会更复杂,可自行添加相应action,必须在配置项 extraPattern 添加对应规则,上面已经举例。
create、delete、update、select、detail这些默认接口,是对单一的数据表结构进行操作,逻辑复杂可自己重写,启用操作如下:
- 新增数据表操作model,继承baseModel,提供数据表
namespace openyii\modules\models;
use openyii\framework\BaseModel;
class UserModel extends BaseModel
{
public $cols = array(); //子类定义显示字段,如'id','username'
/*提供表名*/
public static function tableName(){
return 'user';
}
2.新增控制器提供,表操作model
namespace openyii\modules\controllers;
use openyii\framework\CController;
class UserController extends CController
{
public $modelClass = 'openyii\modules\models\UserModel'; //定义user操作model
}
如此,一个简易的restful接口完成,是对user用户资源的操作,需要添加复杂的接口操作,可以重写接口逻辑,或者加个接口,如:
...
public function actionIndex(){
...
echo 'Hello World!';
}
...