【OreoFrame微PHP快速开发框架】
手册阅读须知:本手册仅针对OreoFrame
3.0.*
版本联系作者:QQ:
609451870
PHP框架各式各样,有很多出色的快速开发框架。但是,很多时候小白从框架开始入门往往会遇到很多难题,可能是因为自身技术不足或许框架的使用难度有点高,或者....。因为,这些问题,作者曾经也遇到过,但最终还是学会了使用这些优秀的框架。这个学的过程是漫长的,也是需要付出更多的时间来慢慢积累经验。但是现在,作者想做出一个疯狂的尝试,想开发出一款,简洁,易懂,易开发小型后端程序的PHP开发框架。可能,这个框架不太完美,不能与市面上的优秀框架媲美。但,作者相信,总有一天会做出一个很好的框架(当然,作者更希望有更多的开发者参与开发贡献代码),毕竟这个尝试也是对自己是一个挑战和学习的过程。 本框架的开发目的是让更多的小白开发者更快速的学习PHP,打造了一款PHP小白也能操作的框架 。
一、基本
目前版本暂时不提供composer安装,所以我们首先需要到GitHub克隆最新代码到本地。
本框架还附赠一套后台管理系统和RBAC权限认证模块。前端部分采用Layui。如果你的项目不需要此模块,可以删除Controller,View,public/static 目录内的所有文件。
1.安装
git clone https://github.com/emran519/oreoFrame
你可以直接克隆到项目文件,或者打包下载到本地。
框架需要配置伪静态规则:
Apache
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [L]
Nginx
if (!-d $request_filename){ set $rule_0 1$rule_0; } if (!-f $request_filename){ set $rule_0 2$rule_0; } if ($rule_0 = "21"){ rewrite ^/(.*)$ /index.php/$1 last; }
运行目录设置为: /public
2.目录介绍
wwwroot WEB部署目录(或者子目录)
├─config 配置文件目录
│ ├─oreo_app.php 基本配置文件
│ ├─oreo_database.php 数据库配置文件
├─controller 控制器目录(项目文件目录)
├─oreo 框架核心文件(不需要改动)
│ ├─extend 扩展类库目录
│ │ └─... 类库内容不一介绍
│ ├─lib 框架核心类
│ │ ├─db 数据库核心类
│ │ │ └─...
│ │ ├─Cache.php 缓存类文件
│ │ ├─Config.php 配置类文件
│ │ ├─Controller.php 控制器类文件
│ │ ├─Db.php 数据库类文件
│ │ ├─Request.php 请求类文件
│ │ ├─Response.php 回应类文件
│ │ ├─Route.php 路由类文件
│ │ ├─SafetyCheck.php 安全检查类文件
│ │ ├─Tool.php 工具类文件
│ │ ├─Vew.php 视图类文件
│ ├─common.php 公共函数库
│ ├─init.php 入口文件
├─public 公共文件目录
│ ├─index.php 入口文件
├─runtime 缓存目录
├─view 视图存放目录
3.配置文件
配置文件主要包括 config目录内的两个文件。这些文件文件分别包括:
oreo_app.php 框架基本配置文件
变量 | 参数 | 说明 |
---|---|---|
debug | true/false | 是否开启错误提示 |
url_html_suffix | .html/.htm | URL伪静态后缀 |
response_type | html/json/xml | 输出格式 |
path_info_index | true/false | 是否显示入口文件 |
path_info_only | true/false | 强制pathInfo |
safety | true/false | 安全监测(如需必须开启Redis) |
safety_frequency | 自定义(int) | 恶意操作触碰频率 |
admin_salt | 自定义(string) | 密码盐 |
session['state'] | true/false | 是否开启session |
session['expire'] | 自定义(int) | session过期时间 |
session['secure'] | true/false | 安全选项 |
session['name'] | 自定义(string) | session名称 |
redis['host'] | string | Redis地址 |
redis['port'] | string | Redis端口 |
redis['password'] | / | Redis密码 |
oreo_database.php 框架数据库配置文件
变量 | 说明 |
---|---|
host | 数据库地址 |
port | 数据库端口 |
type | 数据库驱动,填写mysql |
user | 数据库账号 |
database | 数据库库名 |
password | 数据库密码 |
charset | 数据库编码默认采用utf8 |
prefix | 数据库表前缀 |
connect | 是否使用长连接 |
4.开发规范
所有的项目代码写进controller目录内,且控制器类首字母大写,注意使用控制器命名空间;例如 项目中创建 登录控制器,则需在controller目录内新增Login(当然命名自定义)文件。
实例:
<?php namespace controller; //命名空间 use oreolibController; //引入Controller class Login extends Controller{ //根据项目需要 也可以选择不继承Controller public function index(){ //你的逻辑代码 } } //以上代码的URL地址是 //域名/Login //如果函数不是index或叫 oreo, 则路由地址为 //域名/Login/oreo
二、数据库
1.配置文件
在应用配置目录下面的
oreo_database.php
中(后面统称为数据库配置文件)配置下面的数据库参数:
return [ // 数据库地址 "host" => "127.0.0.1", // 数据库端口 "port" => 3306, // 数据库驱动 "type" => "mysql", // 数据库账号 "user" => "", // 数据库库名 "database" => "", // 数据库密码 "password" => "", // 数据库编码默认采用utf8 "charset" => "utf8", // 数据库表前缀 "prefix" => "", // 是否使用长连接 "connect" => false, ];
2.查询构造器
框架提供数据库链式操作,table方法为数据库表名,如果配置文件中设置过 数据库表前缀,例如:数据库中有oreo_user表,配置文件 数据库表前缀 中设置了oreo_,则table方法内写入 user 即可,如果未配置则需写入完整的表名;
使用Db方法则需在项目文件中引入 Db类,例如:use oreolibDb;
1.查询数据
查询单个数据使用find
方法:
//table方法如果未配置 数据库表前缀 则必须指定完整的数据表名 Db::table('oreo_user')->where('id',1)->find();
查询多个数据(数据集)使用all
方法:
Db::table('oreo_user')->where('status',1)->all();
如果设置了数据表前缀参数的话,可以使用
Db::table('user')->where('id',1)->find(); Db::table('user')->where('status',1)->all();
当然数据库操作的过程中我们已经提供了参数绑定,但你也可以手动操作参数绑定
Db::table('oreo_user')->where('id=:id')->bind(':id','1')->find();
2.添加数据
使用 Db
类的 insert
方法向数据库提交数据
$data = ['name' => 'oreo', 'state' => '1']; Db::table('oreo_user')->insert($data);
添加数据后如果需要返回新增数据的自增主键,可以使用lastInsertId
方法新增数据并返回主键值:
$data = ['foo' => 'bar', 'bar' => 'foo']; Db::table('oreo_user')->insert($data); Db::lastInsertId();
3.更新数据
Db::table('oreo_user')->where('id', 1)->update(['name' => 'oreo']); // $data = ['name' => 'oreo', 'state' => '1']; Db::table('oreo_user')->where('id', 1)->update($data);
4.删除数据
Db::table('oreo_user')->where('id',1)->delete(); Db::table('oreo_user')->where('id',1,'<>')->delete();
5.查询表达式
查询表达式支持大部分的SQL查询语法,查询表达式的使用格式:
where('字段名','查询条件','表达式'); //如果为 = 则不用写 表达式
表达式不分大小写,支持的查询表达式有下面几种:
表达式 | 含义 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
等于(=)
Db::table('user')->where('id',1)->find(); //和下面的查询等效 Db::table('user')->where('id',1,'=')->find();
不等于(<>)
Db::table('user')->where('id',1,'<>')->all();
大于(>)
Db::table('user')->where('id',1,'>')->all();
大于等于(>=)
Db::table('user')->where('id',1,'>=')->all();
小于(<)
Db::table('user')->where('id',10,'<')->all();
小于等于(<=)
Db::table('user')->where('id',10,'<=')->all();
其他支持
当然除了以上几个基本条件外,SQL的查询条件也会有各种复杂条件的条件,这种情况框架也会支持原生方法,你可以直接在where方法内写入
Db::table('user')->where(" `name` LIKE '%oreo' OR `name` LIKE 'php%' ")->all();
以上语句生成
select * from oreo_test where `name` LIKE '%oreo' OR `name` LIKE 'php%'
6.链式操作
table
table
方法主要用于指定操作的数据表。
table
方法分两种情况,1.设置了表前端 2.未设置表前端
例如,以下是未配置 表前端的实例:
return [ //....... // 数据库表前缀 "prefix" => "", //未配置 ..../ ];
Db::table('oreo_user')->where('type>1')->all();
以下是已配置表前端的实例:
return [ //....... // 数据库表前缀 "prefix" => "oreo_", //已配置 ..../ ];
Db::table('user')->where('type>1')->all();
总结:如果未配置表前端则需要添加完整的数据表,则只需写入后半部分
where
where
方法主要用于查询表达式。
具体使用方法在 第二章-->查询构造器-->查询表达式内讲解
alias
alias
用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。
示例:
Db::table('oreo_user') ->alias('a') ->join('oreo_wx b','b.user_id= a.id') ->all();
执行的SQL相当于:
select * from oreo_oreo_user AS a inner join oreo_wx b on b.user_id= a.id
当让这里的join方法我们在后面继续讲
field
field
方法主要作用是标识要返回或者操作的字段,可以用于查询和写入操作。
指定字段:
Db::table('oreo_user')->field('id,name,type')->all();
这里使用field方法指定了查询的结果集中包含id,name,type三个字段的值。执行的SQL相当于:
SELECT id,title,type FROM oreo_user
可以给某个字段设置别名,例如:
Db::table('oreo_user')->field('id,username as name,email as mail,phone')->find();
执行的SQL语句相当于:
SELECT id,username as name,email as mail,phone FROM oreo_user
使用SQL函数
可以在field方法中直接使用函数,例如:
Db::table('oreo_user')->field('user_money,SUM(money)')->all();
执行的SQL相当于:
SELECT user_money,SUM(money) FROM oreo_user
除了all方法之外,所有的查询方法,包括find等都可以使用field方法。
使用数组参数
field方法的参数可以支持数组,例如:
Db::table('oreo_user')->field(['id','username','email'])->all();
最终执行的SQL和前面用字符串方式是等效的。
数组方式的定义可以为某些字段定义别名,例如:
Db::table('oreo_user')->field(['id','username'=>'name'])->all();
执行的SQL相当于:
SELECT id,username as name FROM oreo_user
limit
limit
方法主要用于指定查询和操作的数量
限制结果数量
例如获取满足要求的5个用户,如下调用即可:
Db::table('oreo_user') ->where('type',1) ->limit(5) ->all();
分页查询
用于文章分页查询是limit方法比较常用的场合,例如:
Db::table('oreo_user')->limit(10,60)->all();
表示查询文章数据,从第10行开始的60条数据(可能还取决于where条件和order排序的影响 这个暂且不提)。
order
order
方法用于对操作的结果排序或者优先级限制。
用法如下:
Db::table('oreo_user') ->where('type', 1) ->order('id', 'desc') ->limit(10) ->all();
执行的SQL相当于:
SELECT * FROM `oreo_user` WHERE `type` = 1 ORDER BY `id` desc LIMIT 10
如果没有指定desc
或者asc
排序规则的话,默认为desc
。
join
JOIN
方法用于根据两个或多个表中的列之间的关系,从这些表中查询数据。join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。
要关联的(完整)表名以及别名
支持的写法:
写法1:[ '完整表名或者子查询'=>'别名' ] 写法2:'不带数据表前缀的表名'(自动作为别名) 写法2:'不带数据表前缀的表名 别名'例如
Db::table('oreo_user') ->alias('a') ->join('oreo_wx b','a.id = b.wx_id') ->join('oreo_test c','a.test_id = c.id') ->all();
//
Db::table('oreo_user') ->alias('a') ->join('oreo_auth_role b','a.role_id = b.id') ->field('a.id,b.id as role_id,a.username,a.gender,a.real_name,a.user_phone,a.user_email,a.state,a.create_time,b.role_name') ->limit(0,30)->all();
count
count
方法用于统计数据。
获取用户数:
Db::table('oreo_user')->count();
实际生成的SQL语句是:
select count(*) from oreo_user limit 1
3.事务操作
例如:
// 启动事务 Db::begin(); try { Db::table('oreo_user')->where('id',1)->update(['name'=>'oreo']); Db::table('oreo_user')->where('id',10)->delete(); // 提交事务 Db::commit(); } catch (Exception $e) { // 回滚事务 Db::rollback(); }
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。
3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考学习用!
4、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。