# PHP傻瓜式-新手Noob框架 **Repository Path**: abmo2o/php-api-demo ## Basic Information - **Project Name**: PHP傻瓜式-新手Noob框架 - **Description**: PHP傻瓜式框架 封装MySQL增删改查,文件上传,网络请求,邮箱发送,在线支付等常用功能。不求极致性能,只求傻瓜式一键调用。 推荐做php作业的混分的大学牲使用。 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: app - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 3 - **Created**: 2022-11-10 - **Last Updated**: 2024-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PHP傻瓜式Noob框架 #### 介绍 原生PHP封装简易后端api框架——PHP傻瓜式Noob框架 封装MySQL增删改查,文件上传,网络请求,邮箱方式,在线支付等常用功能。不求极致性能,只求傻瓜式一键调用。推荐做php作业的混分的大学牲使用。 #### 项目结构 ```php app---应用目录-(在这里做你的项目) |--controllers---必要---控制器--在这里写业务逻辑 |--extend---非必要---扩展类文件--写你的自定义公共方法 |--public---非必要---静态文件目录--比如存放图片 |--routes---必要---路由文件--就是管理你网址的地方 |--service---非必要--在控制器中抽离出专门用来操作数据库 |--views---非必要---放html模板的地方,功能还在完善中 config---配置文件夹 | config_text.php---参数配置文件(在这里填你的配置信息) | class--使用导入的方法文件夹-(不要动) |--config.php---总配置文件 |--JwtToken---token配置文件 |--router----项目路由配置文件 |--verCode----图形验证码配置文件 |--epay--易支付配置文件 |--email--邮箱配置文件 index.php--入口文件 | .htaccess-------| |--服务器配置文件不要动 nginx.htaccess--| ``` #### 使用说明-旧版本的说明,功能大差不差懒得改了 1. 下载项目解压到php网站根目录 2. 到config/config.php里配置mysql参数 3. 在routes/router.php里配置路由地址 4. 在controllers文件夹里创建你的控制器文件。(你的文件名得和第3步路由列表里控制器对应) 5. 在service里创建自定义数据库业务文件。(你的文件名得和第4步控制器文件里的方法对应) ### 控制器中可用方法 ##### 1、数据库增删改查:Query() ```php //这里定义mysql查询语句,查询条件参数前面加:,后面名字自定义,如:id $sql = "SELECT * FROM student WHERE id=:id" //多参数以此类推["id"=>1,key"=>"value",.....] $params=["id"=>1]; // 使用parent:: 调用继承的config文件的class 的Query方法 //数据库查询方法:Query(sql语句[,参数]); $data = parent::Query($sql,$params); //返回的是一个数组数据 //注:Query()方法可以实现增删改查,可以舍弃下面IDU方法 ``` ##### 2、数据插入,删除,修改。IDU() ```php //定义mysql插入语句,插入条件参数前面加:,后面名字自定义,如:sNo,:sName,:sex,分别对应插入字段 $sql = "INSERT INTO student(sNo,sName,sex)VALUES(:sNo,:sName,:sex)" //多参数以此类推[key"=>"value",.....] $params=[ "sNo"=>"111451411", "sName"=>"哈哈哈", "sex"=>"男"]; //数据库插入方法:IDU(sql语句[,参数]); $data = parent::IDU($sql,$params); //$data返回的数据 //"success": true, 状态 //"rowCount": 1, 影响行数 //"lastInsertId": "65" 插入的数据id // 调用统一接口返回格式 //可以根据返回的数据进行判断 ``` ##### 3、生成图像验证码:createCode() ```php // 返回 code和base64两个参数 $data = parent::createCode(); // 在线解析base64图片: https://www.lddgo.net/convert/base64-to-image ``` ##### 4、生成token和解析token。 createToken(), validateToken() ```php //生成token // $payload是要加密的数据,格式示例: //[ "key"=>"value"]; // 如: // $payload=[ // "userName"=>"hahahah", // "age"=>"14", // "sex"=>"男" // ]; // $time是生效的时间,单位秒 $token=parent::createToken($payload, $time = 3600); //解析token $data= parent::validateToken(); //会获取请求头AUTHORIZATION ``` ##### 5、图片上传,删除。uploadFiles(), deleteFile() ```php //上传 $picArray=$_FILES["fileupload"];; //文件数组 $path = "public/image"; //保存的路径 $data=parent::uploadFiles($picArray,$path); //返回图片相对路径数组, //删除 方法1 $fileName="1.png"; //文件名 $path = "public/image"; //文件的路径 $data=parent::deleteFile($fileName,$path); //返回true表示成功,false 表示失败 // 方法2 直接使用路径+文件方式删除 $path = "public/image/114514.jpg"; parent::deleteFile(null, $path);//第一个文件名参数设置null,后面设置文件地址 ``` ##### 6、视图数据:renderView() ```php //$params数组中的数据提取为变量,使其在模板中可用 $params=[ "userName"=>"123", "age"=>18, "sex"=>"男" ]; $template="home/home"; //模板路径。从根目录views文件夹内开始,如 //views // |--home--文件夹 // |--home.php---最终模板 parent::renderView($template,$params); 在模板中所有数据存在$data里 ``` ##### 7、统一json返回格式:response() ```php // 调用统一接口返回格式 parent::response($data); //response($data = [], $code = 200, $msg = 'success') //$data 是返回的数据 //$code 是业务状态码 //$msg 是返回业务信息 //默认返回格式: { "code": 200, "msg": "success", "data": [] } ``` ##### 8、网络请求-服务器向服务器:sendRequest() ```csharp // 网络请求 public function Request() { $url="http://127.0.0.1:114514/";//请求地址 $data=[ //请求参数 "key1"=>"value1", "key2"=>"value2" ]; $res=parent::sendRequest($url,$data,"GET"); } ``` ##### 9、网页跳转支付:pagePay() ```php // 易支付测试-页面跳转支付 public function ApagePay() { $parameter = [ "type" => "alipay", //支付类型(可传入alipay,wxpay,qqpay,bank,jdpay) "name" => "接口测试", //商品名称 "money" => 1, //商品金额 "out_trade_no" => "114514", //业务订单号 ]; $pagePay = parent::pagePay($parameter); echo $pagePay; //返回html表单代码,在浏览器自动执行 } ``` ##### 10、api接口支付:apiPay() ```php // 易支付测试-api接口支付 public function AapiPay() { $parameter = [ "type" => "alipay", //支付类型(可传入alipay,wxpay,qqpay,bank,jdpay) "name" => "接口测试", //商品名称 "money" => 1, //商品金额 "out_trade_no" => "114514", //业务订单号 ]; $apiPay = parent::apiPay($parameter); var_dump($apiPay); //返回json数据 // { // ["code"]=> 1为成功,其它值为失败 // int(1) // ["trade_no"]=> 支付订单号 // string(19) "2023101111084817671" // ["payurl"]=> // string(54) "https://pay.yzf001.com/pay/submit/2023101111084956247/" // } //支付链接 //支付跳转url payurl 如果返回该字段,则直接跳转到该url支付 //二维码链接 qrcode 如果返回该字段,则根据该url生成二维码 //小程序跳转url urlscheme 如果返回该字段,则使用js跳转该url,可发起微信小程序支付 } ``` ##### 11、手动获取支付链接:getPayLink() ```php // 易支付测试-手动点击链接支付 public function linkpay() { $parameter = [ "type" => "alipay", //支付类型(可传入alipay,wxpay,qqpay,bank,jdpay) "name" => "接口测试", //商品名称 "money" => 1, //商品金额 "out_trade_no" => "114514", //业务订单号 ]; $getPayLink = parent::getPayLink($parameter); echo $getPayLink; //返回支付链接,需要用户手动前往浏览器打开 } ``` ##### 12、查询支付订单:queryEpayOrder() ```php // 查询易支付订单 输入业务订单号 public function queryOrder(){ $out_trade_no="20231010235647253";//这里的订单号再订单创建时保存再数据库里,需要时取出查询 $apiPay = parent::queryEpayOrder($out_trade_no); var_dump($apiPay); //返回格式 // { // "code": 1, 1为成功,其它值为失败 // "msg": "succ", // "trade_no": "2023101023564828062", 易支付订单号 // "out_trade_no": "20231010235647253", 商户系统内部的订单号 // "api_trade_no": "2023101023564841368", 支付宝微信等接口方订单号 // "type": "alipay", 支付方式 // "pid": "35894", 发起支付的商户ID // "addtime": "2023-10-10 23:56:48", 创建订单时间 // "endtime": "2023-10-10 23:57:11", 完成交易时间 // "name": "哈哈哈1", 商品名称 // "money": "1.00", 商品金额 // "param": null, 业务扩展参数默认留空 // "buyer": null, 支付者账号 默认留空 // "status": "1", 支付状态 1为支付成功,0为未支付 // "payurl": null 默认留空 // } } ``` ##### 13、发送邮箱:sendEmail() ```php // 注意!注意!注意!先到 config/email/sendEmail.php 里配置邮箱 public function email() { $param = [ // "to" =>[ // 添加多个收件人 // "xxxx@qq.com", // "xxxxxx@qq.com", // ..... // ], "to"=>"114514@qq.com", // 添加单个收件人,二选一 "title"=>"标题",//邮件标题 "Body"=>"内容",//邮件内容,可以是html //"Body"=>'

哈哈哈

' ]; // 附件重命名 // $files = [ // [ // "file" => "./public/image/1.jpeg", // "name"=>"虎哥1.jpeg" // ], // [ // "file" => "./public/image/1.jpeg", // "name"=>"虎哥2.jpeg" // ] // ]; // // 不重命名 $files = [ "./public/image/1.jpeg" ]; $res = parent::sendEmail($param,$files); //$files可以不填 } ``` ### 如何运用到项目作业中 ##### 1、首先我们要统一接口路径,如模板默认的是/api/v1,(意义是:api接口/v1版本) ##### 2、假设现在要做一个用户登陆、注册功能,那我们需要相应的login,register两个接口。(拼接上统一接口路径后是:,其他接口以此类推) ##### 3、需要设置路由,在根目录的routes/router.php。(路由就是浏览器上的网址,因为你需要定义上面那两个接口) ```php prefix("/api/v1"); // $router->post,get和post两种方法 // $router->get('路由地址', '控制器名字', '控制器里的方法', '路由拦截(不填默认不开启)'); //从这里开始 往下 写你定义的路由地址 //注意:登录和注册要使用post,为什么?请自己找教程 $router->post('/login', 'userCtrl', 'userLogin'); // /login 就是登录的接口,userCtrl是我们定义的一个控制器文件,因为是关于用户操作的,所有我们把他归类到用户里。 // userLogin是userCtrl控制器里的一个方法(登录方法) $router->post('/register', 'userCtrl', 'userRegister'); // /register就是注册的接口。。。。。跟上面一样, userRegister是userCtrl控制器里的一个方法(注册方法) // 用户信息,后面加true开启路由器拦截,如果请求时没有token不通过 $router->get('/userInfo', 'userCtrl', 'getUsereData',true); //从这里开始 往上 写你定义的路由地址 // 获取路由配置 $routes= $router->getRoutes(); ?> ``` ##### 4、创建相关控制器(路由中定义的是userCtrl,所以要在controllers控制器文件夹里创建userCtrl.php) ```php $userName,"userPwd"=>$userPwd]); return $data; //返回查询结果,这时候返回教程第4步接着看 3,4,5 } //带参数查询示例 public function getAllResources() { // 这里推荐使用占位符 $sql = "SELECT * FROM student WHERE id=:id"; // Query($sql,$params) // 第一个是sql语句,第二个是参数,格式: // $params=[ // "key1"=>"value1", // "key2"=>"value2", // ......,以此类推 // ]; $data = parent::Query($sql,["id"=>11]); parent::response($data); } } ``` ##### 6、所以代功能以此类推,如果查询内容不复杂可以直接写在控制器方法里。 #### 声明 此项目只是我个人用于应付课程项目所做,可轻松应对php和js课程。如果需要制作大型正规项目请不要使用! ![](%E6%8E%A5%E5%8F%A3.jpg)