smhdhsn / zed
ZED 是一个基于 PHP 的 API 微型框架。
Requires
- smhdhsn/zed-core: ^1.0
- vlucas/phpdotenv: ^5.3
- dev-master
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-develop
- dev-improve-model-class-structure
- dev-improve-router-class-structure
- dev-improve-request-class-structure
- dev-hotfix
- dev-improve-migration-class-structure
- dev-improve-maker-class-structure
- dev-improve-database-class-structure
- dev-make-command-enhancement
This package is auto-updated.
Last update: 2024-09-29 05:50:03 UTC
README
关于
ZED 是一个基于 PHP 的 API 微型框架。
特性
- ORM。
- 路由。
- 迁移。
- 命令。
- 请求验证。
入门指南
确保您的机器上已安装 composer
,然后使用 composer 创建一个新的 ZED 项目
composer create-project smhdhsn/zed ProjectName
应用创建后,您可以使用命令行启动 ZED 的本地开发服务器
php command serve
您可以提供自定义端口,如下所示
php command serve --port=8080
文档
路由
定义路由
您可以为您的应用程序定义路由选择三种选项。
通过闭包
$router->get('/projects', function () { return 'Hello, World !'; });
通过字符串
$router->get('/projects', 'ProjectController@index');
通过数组
use App\Controllers\ProjectController; $router->get('/projects', [ProjectController::class, 'index']);
中间件
您可以将中间件应用到路由,如下所示。
$router->get('/project/:projectId', 'ProjectController@show', [ 'checkAvailability' ]);
ℹ️ 您需要在数组中列出负责中间件的方法名称。
保护路由
如前所述,您可以将中间件作为数组的第三个参数提供到路由中。
$router->get('/project/:projectId', 'ProjectController@show', [ 'auth' ]);
ℹ️ auth 中间件由 JWT 驱动,负责保护路由免受未经身份验证的请求。
路由参数
您可能希望将路由参数传递给您的应用程序。您可以这样做:
$router->get('/projects/:projectId/logs/:logId', 'ProjectController@index');
ℹ️ 在您的控制器或闭包中,您将接收到请求对象作为第一个参数。
<?php namespace App\Controllers; use Zed\Framework\{Controller, Request}; class ProjectController extends Controller { /** * Showing project's index page. * * @param Request $request * @param int $projectId * @param int $logId * * @return string */ public function index(Request $request, int $projectId, int $logId): string { // } }
请求
请求对象包含传递给应用程序的每个参数,无论它是来自请求体还是查询字符串,您可以通过以下方式访问请求参数
$request->projectName;
请求验证
您可以对请求进行验证,并在发生错误时显示适当的错误消息。
$request->validate([ 'name' => 'required|string|min:10', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|max:64', ]);
有效的验证规则
必需
此规则下的字段是必需的,必须提供给应用程序。
$request->validate([ 'name' => 'required', ]);
字符串
此规则下的字段必须是一个有效的字符串。
$request->validate([ 'surname' => 'string', ]);
数字
此规则下的字段必须是一个有效的数字字符串。
$request->validate([ 'age' => 'numeric', ]);
电子邮件
此规则下的字段必须是一个有效的电子邮件。
$request->validate([ 'email' => 'email', ]);
最大值
此规则下的字段必须包含少于给定值的字符。
$request->validate([ 'password' => 'max:64', ]);
最小值
此规则下的字段必须包含多于给定值的字符。
$request->validate([ 'name' => 'min:5', ]);
唯一
此规则下的字段必须在数据库中是唯一的,您必须在表名后提供要检查请求属性唯一性的列。
$request->validate([ 'email' => 'unique:users,email', ]);
在这种情况下,应用程序将遍历数据库中的用户表,并检查是否存在具有相同值的 email 列。
响应
唯一可用的响应类型是 JSON,为了保持响应属性的统一性,您可以使用 Controller 的 response() 方法。此方法接受 3 个参数:响应单词、响应数据、响应 HTTP 状态码。
<?php namespace App\Controllers; use Zed\Framework\{Controller, Request, Response}; class ProjectController extends Controller { /** * Showing project's index page. * * @param Request $request * @param int $projectId * @param int $logId * * @return string */ public function index(Request $request, int $projectId, int $logId): string { $data = "{$projectId} - {$logId}"; return $this->response( Response::SUCCESS, $data, Response::HTTP_OK ); } }
您可能想查看 Response 类,其中有许多可用的响应单词和代码。
错误
在可能发生错误的情况下,您还可以使用 Controller 的 error() 方法
<?php namespace App\Controllers; use Zed\Framework\{Controller, Request, Response}; use Exception; class ProjectController extends Controller { /** * Showing project's index page. * * @param Request $request * @param int $projectId * @param int $logId * * @return string */ public function index(Request $request, int $projectId, int $logId): string { $data = "{$projectId} - {$logId}"; try { return $this->response( Response::SUCCESS, $data, Response::HTTP_OK ); } catch (Exception $exception) { return $this->error( Response::ERROR, $exception->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR ); } } }
ORM
ZED 提供了一些与数据库交互并执行简单 CRUD 操作的功能。
创建
Project::create([ 'author' => $request->author, 'name' => $request->name, 'type' => $request->type ]);
查找
您有两种选择,无论是通过 where 子句查找记录还是通过它们的唯一 ID 查找记录。
where 子句
返回对象集合,如果没有匹配的记录,则返回空集合。
Project::where('name', $request->name)->get();
find 方法
返回模型类型的对象,如果没有匹配的记录,则抛出 NotFoundException
。
Project::find($id);
更新
$project = Project::find($id); $project->update([ 'name' => $request->name, 'type' => $request->type ]);
删除
$project = Project::find($id); $project->delete();
命令
ZED还提供了一种通过命令行与应用程序交互的方式。您可以使用以下命令创建自己的命令:
php command make:command YourCommand
该命令将在路径 App/Commands
中创建您的命令。
创建命令后,您需要在 Routes/command
文件中将它指向应用程序,如下所示:
$command->define('command-name', \App\Command\YourCommand::class);
您也可以将闭包作为定义方法的第二个参数提供,以处理您的命令动作。
$command->modify('command-name', function () { // });
ℹ️ 命令名称之后的所有参数都可以在命令的类或闭包中访问。
php command say 'Hello World !'
在 command.php 文件中
use Zed\Framework\CommandLineInterface as CLI; $command->modify('say', function (string $message = 'Hello') { return CLI::out($message); });
此外,CommandLineInterface 类包括大量您可以利用的命令行选项,如cli颜色、背景、字体等...
预定义命令
迁移
此命令处理迁移操作
运行迁移
php command migrate
回滚迁移
php command migrate:rollback
重置所有迁移
php command migrate:reset
重置然后再次运行所有迁移
php command migrate:fresh
创建
此命令负责在应用程序中创建类以节省时间。
创建新的控制器
php command make:controller UserController
创建新的模型
php command make:model User
创建新的仓库
php command make:repository UserRepository
创建新的服务
php command make:service UserCreatingService
创建新的迁移
php command make:migration create_users_table
创建新的命令
php command make:command UserCreatingCommand
许可证
ZED微框架是开源软件,受MIT许可证许可。