Nos—基于Yaf && 兼顾性能与开发效率的PHP框架
composer create-project --prefer-dist jiangbaiyan/nos
赋予logs目录读写权限
生产/开发环境加载的配置文件类别可以到index.php中的yaf.environ配置项去修改
配置nginx等服务器rewrite到/public/index.php入口文件
server {
listen ****;
server_name domain.com;
root document_root;
index index.php index.html index.htm;
if (!-e $request_filename ) {
rewrite ^/(.*) /index.php/$1 last ;
}
}
composer
数据库操作类
配置类
文件操作类
日志处理类
队列操作类
分页操作类
Redis操作类
表单验证器类
异常处理类
请求类
响应类
路由:http://localhost/article/query
目录:controllers/Article/Query.php
类名:Article_QueryController
注意路由和文件命名规则要相同,类名必须是一级目录_二级目录_...文件名Controller,必须继承BaseController并实现相应抽象方法indexAction()
<?php
use Nos \Exception \CoreException ;
use Nos \Exception \ParamValidateFailedException ;
use Nos \Http \Request ;
use Nos \Http \Response ;
use Nos \Comm \Validator ;
use Common \TestModel ;
class Article_QueryController extends BaseController
{
/**
* 业务逻辑
* @throws CoreException
* @throws ParamValidateFailedException
*/
public function indexAction ()
{
Validator::make ($ params = Request::all (), [
'id ' => 'required ' ,
'phone ' => 'phone|required ' ,
]);
$ testModel = new TestModel ();
$ data = $ testModel ->getData ();
Response::apiSuccess ($ data );
}
}
注意:目录和文件名必须大写。类名必须为:文件名Model,如果有上级目录必须加上namespace,可继承BaseModel
目录:models/Common/Test.php
<?php
namespace Common ;
use Nos \Base \BaseModel ;
class TestModel extends BaseModel {
/*
* 表名
*/
public static $ table = 'test ' ;
/**
* 模型层查询示例
* @return mixed
* @throws \Exception
*/
public function getData ()
{
// 要更新的数据
$ params = [
'name ' => 'grapes '
];
// 条件过滤
$ wheres = [
'id ' => 222
];
// 附加选项
$ option = [
'id ' => 'asc '
];
// 更新操作
$ row = self ::update ($ params , $ wheres );
// 查询操作
$ data = self ::select (['id ' ,'name ' ], $ wheres , $ option );
// 返回数据
return $ data ;
}
}
框架内部定义了6种异常,分别对应不同的默认状态码和提示信息
抛出异常后,框架会自动路由到Error.php
Error.php会做两件事:写日志、返回json
异常返回的json内容依赖抛异常时的状态码和提示信息
required:必填项
phone:手机号
email:邮箱地址
idCard:身份证
date:年月日。如2019-10-18
dateTime:时分秒。如17:45:16
integer:数字整型
numeric:能够转换成数字型的字符串或原本就是数字
float:单精度浮点型
double:双精度浮点型
array:数组类型
string:字符串类型
bool:布尔类型
minNum:数值最小值。如minNum:2
maxNum:数值最大值。如maxNum:3
minLen:字符串长度最小值。如minLen:2
maxLen:字符串长度最大值。如maxLen:3
betweenNum:数值在两个值之间。如betWeenNum:1,5
betweenLen:字符串长度在两个值之间。如betweenLen:2,4
in:是否在给定枚举值之内。如in:jiangbaiyan,grape
exist:是否包含某个子串。如exist:baiyan
自定义的配置需在config目录下建立xxx.ini文件编写
获取配置可以通过Config::get('xxx.ini');来获取
如果需要引入库,请直接编辑composer.json并添加需要的库
然后执行composer install/update即可