smhdhsn/zed

ZED 是一个基于 PHP 的 API 微型框架。

维护者

详细信息

github.com/SMhdHsn/zed

源代码

问题

安装: 18

依赖项: 0

建议者: 0

安全: 0

星标: 7

关注者: 1

分支: 0

类型:项目

v1.0.6 2021-09-28 13:08 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许可证许可。