vgalvoso / phpeasy
PHPEasy是一个以API为中心的PHP框架
README
PHPEasy是一个以API为中心的PHP框架。代码尽可能接近PHP语言本身,而不是框架。
特性
- REST API开发
- 全栈Web应用开发
- 基于文件的路由
- 轻量级,没有太多的依赖和配置
- 简单的数据库抽象层
- 辅助函数,如输入验证器、代码生成器、上传文件等。
- 促进使用ubt而不局限于过程式编程
- 支持PHP 8及以上,MySQL、MSSQL和SQLite
- 包括基本的css(mystyle.css)和js(vanscript.js)工具库。
主要特点
- 促进掌握PHP语言本身而不是框架。
- 直接明了的编码,没有太多的抽象。
- 使用数据抽象层而不是ORM,专注于最大性能,不使用ORM的大数据库调用。
目录
I. 简介
II. 先决条件
III. 安装
简介
这是为喜欢纯PHP及其简单性的人准备的。如今,你必须遵循编码标准(OOP、SOLID、DRY等)和MVC框架,才能使用PHP进行Web开发。现有的PHP框架包含太多的文件、配置、类和依赖关系。我制作了这个小型框架,这样PHP开发者可以更快地进行Web开发,同时掌握并享受PHP语言本身(是的!不需要学习那么多库)。
先决条件
- PHP 8^.
- Composer.
安装
Composer - 在根目录或htdocs文件夹内打开终端并执行以下命令。
composer create-project vgalvoso/phpeasy my_phpeasy
您可以将[my_phpeasy]更改为您想要的任何项目名称。
现在打开您的浏览器并转到 https:///my_phpeasy
1. 视图
在视图文件夹内创建视图。
视图路由将根据视图文件夹结构自动创建。
请看下面的示例。
- 视图文件路径:[View/admin/dashboard.php],路由:["admin/dashboard"]。
- 视图文件路径:[View/login.php],路由:["login"]。
如果视图文件名为[index.php],则可以省略文件名。
- 视图文件路径:[View/index.php],路由:[""]。
- 视图文件路径:[VIew/admin/index.php],路由:["admin"]。
1.1 视图组件
(SPA)单页应用程序由视图组件组成。
视图组件只能通过Ajax请求访问。
只需在视图文件顶部调用Core/Helper/component()即可将其指定为视图组件。
示例:View/admin/users_table.php
<?= Core/Helper/component(); ?> <table> <thead> <tr> <th>Username</th> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tbody id="users_tbl"> <tr><td>No Contents</td></tr> </tbody> </table>
2. APIs
PHPEasy支持REST API。
所有API都放置在api文件夹中。
API路由将根据api文件夹的文件结构和php文件中实现的以http动词命名的函数(例如get()、post()、patch())自动创建。
例如,如果您省略了delete()函数,则无法调用DELETE api/users/{id}。
以下是一个用户REST API的示例。
API文件路径:[api/users.php]
路由
- GET api/users - 获取所有用户
- GET api/users/{id} - 根据id获取用户
- POST api/users - 创建新用户
- DELETE api/users/{id} - 删除一个用户
- PUT api/users/{id} - 替换用户
- PATCH api/users/{id} - 更新一个用户
<?php use Core\DAL; use function Core\Helper\error; use function Core\Helper\getRequestBody; use function Core\Helper\response; use function Core\Helper\startAPI; startAPI(); function get(){ $db = new DAL(); //GET user by id if(defined('URI_PARAM')){ $query = "SELECT * FROM users WHERE id = :id"; $param = ["id" => URI_PARAM]; if(!$user = $db->getItem($query,$param)) response([]); response([$user]); } //GET All users $query = "SELECT * FROM users"; $users = $db->getItems($query); response($users); } function post(){ $db = new DAL(); $rq = (object)getRequestBody(); $values = [ "username" => $rq->username, "firstname" => $rq->firstname, "lastname" => $rq->lastname, "usertype" => $rq->usertype, "password" => password_hash($rq->password,PASSWORD_BCRYPT) ]; if(!$db->insert("users",$values)) error($db->getError()); response("New User added!"); } function delete(){ if(!defined('URI_PARAM')) error("Invalid Request! Please specify user id"); $db = new DAL(); $id = URI_PARAM; if(!$db->delete("users","id=:id",["id" => $id])) error($db->getError()); response("User Deleted Successfuly!"); } function patch(){ if(!defined('URI_PARAM')) error("Invalid Request! Please specify user id"); $db = new DAL(); $id = URI_PARAM; $rq = (object)getRequestBody(); $values = [ "firstname" => $rq->firstname, "lastname" => $rq->lastname]; $params = ["id" => $id]; $db = new DAL(); if(!$db->update("users","id=:id",$values,$params)) error($db->getError()); response("User Updated Successfuly"); } //EOF
3. API 函数
PHPEasy 中的 API 鼓励使用过程式编程风格,
以下是在 API 实现中可以使用的函数列表
3.3 startAPI
将 PHP 文件初始化为 REST API。
调用此函数后,您可以实现 HTTP 动词作为函数。
示例
<?php use function Core\Helper\startAPI; startAPI(); function get(){ //Handle GET request to api/users }
如果您尝试使用除 GET 之外的其他 HTTP 方法进行请求,则会收到错误响应。
3.4 getRequestBody
获取请求体并将其转换为关联数组。
示例
<?php use Core\Helper\getRequestBody; $rq = getRequestBody(); $username = $rq["username"]; $password = $rq["password"]; //you can convert it to object for easy access //$rq = (object)$rq; //$username = $rq->username; //$password = $rq->password;
3.5 validate($inputs,$validations)
根据验证规则验证键值对数组。
- 如果有效,则返回 true;如果不有效,则退出并返回 400 状态码和错误详情。
- 用于验证请求数据 ($_GET,$_POST)。
$inputs
- 要验证的关联数组。$validations
- 包含与 $data 中的键匹配的键的关联数组,值是验证规则。
示例
<?php use function Core\Helper\getRequestBody; use function Core\Validator\validate; $rq = getRequestBody(); $dataRules = ["uname" => "required|string", "upass" => "required|string", "firstName" => "required|string", "lastName" => "required|string"]; validate($rq,$dataRules);
3.6 error(string|array $message)
以 400 状态码和错误消息输出响应
$message
- 字符串|数组 错误消息
3.7 response(string|array $content,int $statusCode = 200,string $contentType = 'application/json')
设置内容类型和状态码,然后输出内容并退出脚本
$content
string|array - 要输出的内容$statusCode
int - 响应状态码(默认 200)$contentType
string - 内容类型(默认 application/json)。可用内容类型:[ application/json | plain/text | text/html ]
3.8 to($route)
包含指定的视图
$route
string - 视图文件路径
主要用于调用 SPA 组件
3.9 redirect($path="")
重定向到指定的视图。
如果没有指定路径,则根据会话进行重定向。
$view
string - 视图的路径
3.10 esc($string)
htmlspecialchars() 的简短语法
$string
- 要清理的字符串- 用于 HTML 清理。
3.11 generateCode($length = 6)
生成一个随机的字母数字代码
$length
- 要生成的代码长度(默认 6)
3.12 objectToSession($object)
提取对象键和值并将其存储到会话数组中
$object
- 要提取的对象 示例
<?php use Core\DAL; $db = new DAL(); if(!$user = $db->getItem(1)) invalid("User does not exist!"); objToSession($userInfo);
3.13 uploadFile($uploadFile,$uploadPath)
生成新文件名并上传文件
string $uploadFile
$_FILE 键
string $uploadPath
上传文件的路径必须以 "/" 结尾- 返回布尔值|字符串,如果成功则返回新文件名,否则返回 false
3.14 session($sessionVar,$value = null)
获取/设置会话变量
$sessionVar
- 会话键$value
- 如果为 null,则设置会话值
3.15 objArrayToValues($objArr,$item)
将对象数组转换为包含指定项值的索引数组。
$objArr
- 要转换的对象数组$item
- 要提取的对象项
4. 与数据库一起工作
PHPEasy 介绍了用于数据库操作的 DAL() 类。支持 MYSql、MSSql 和 SQLite。
在 Config/Database.php 中设置数据库配置
以下是 DAL() 函数
4.1 初始化
$db = new DAL();
4.2 insert
执行 INSERT 语句;
$table
- 要插入的表名$values
- 包含与表字段匹配的键的关联数组以及要插入的值。- 返回布尔值
示例
$values = ["username" => $uname, "password" => $upass, "firstname" => $firstName, "lastname" => $lastName]; $db->insert("users",$values);
4.3 update
执行更新语句
string $table
要更新的表string $condition
条件例如 id = :idarray $values
要更新的值的关联数组例如 .["age" => 27]
array $params
条件的值例如 . ["id" => 1]- 返回布尔值
示例
$values = [ "firstname" => $firstName, "lastname" => $lastName]; $params = ["id" => 1]; $db = new DAL(); $db->update("users","id=:id",$values,$params);
4.4 delete
执行删除语句
string $table
要从其删除的表string $condition
使用预处理语句的查询条件,例如:id = :id AND name = :namearray $params
条件的值,例如:["id" => 1,"name" => "Juan Dela Cruz"]- 返回布尔值
示例
$delete("users","id=:id",["id" => 1]);
4.5 getItems
选择多个项目
string $query
选择语句array $inputs
预处理语句的参数,默认(null)- 返回数组|false
示例
$db = new DAL(); $sql = "SELECT * FROM users WHERE lastname = :surname"; $params = ["surname" => $lastName]; $users = $db->getItems($sql,$params);
4.6 getItem
选择单行查询
string $query
选择语句array $inputs
预处理语句的参数,默认(null)- 返回对象|false
示例
$db = new DAL(); $sql = "SELECT * FROM users WHERE id=:userId"; $params = ["userId" => 1]; $users = $db->getItem($sql,$params);
4.7 startTrans()
开始数据库事务。
4.8 commit()
提交数据库事务。
- 在api返回响应之前放置此操作。
4.9 rollback()
回滚数据库事务。
- 很少使用,因为当您在未调用commit()的情况下退出脚本时,
- rollback()将被自动执行。
4.10 getError()
返回数据库错误
- 一个非常有用的调试工具。
4.11 lastId($field=null)
获取数据库中插入的最后ID
string $field
指定lastId字段,默认null
4.12 getDriver()
获取当前使用的数据库驱动。
- api/getAllUser.php
```php
<?php
$db = new DAL();
$users = new Users($db);
$usersList = $users->getAll();
您可以根据项目需求使用或不用模型。
DAL类可以直接在api文件中访问,您可以直接在api实现中执行查询,而无需创建模型。
5. 进阶
PHPEasy是进阶的,如果您喜欢,可以添加模型、服务,只需更新composer.json文件,如果添加了其他目录。
6. 扩展
参考
- js帮助器:public/js/vanscript.js
- css:public/css/mystyle.css