aaron-lin/app-php

一个用于构建 Web 应用的 PHP 框架。

1.0.0 2024-08-13 02:05 UTC

This package is auto-updated.

Last update: 2024-09-15 02:14:21 UTC


README

安装

$ composer require aaron-lin/app-php

使用

支持的 PHP 应用程序类型有三种:RESTful 应用CRUD 应用单页应用

RESTful 应用

要构建 RESTful 应用,扩展 Lin\AppPhp\Server\RestfulApp 类,并覆盖 OnGet|OnPost|OnPut|OnDelete|OnPatch 方法。

详细示例,请参阅 example/restful_app.php

CRUD 应用

要构建仅接受 POST 方法并从资源路径接收命令的 CRUD 应用,扩展 Lin\AppPhp\Server\CrudApp 类,并覆盖 OnCreate|OnRead|OnUpdate|OnDelete 方法。

详细示例,请参阅 example/crud_app.htmlexample/crud_app.select.php

单页应用

要构建单页应用,实例化 Lin\AppPhp\Server\SinglePageApp 类,并将网页 HTML 代码作为字符串传递给构造函数,然后调用 AddPostAction 方法添加处理 POST 请求的动作。

详细示例,请参阅 example/single_page_example.htmlexample/single_page_app.php

授权

要实现授权

  1. 创建一个实现了 Lin\AppPhp\Authorization\AuthorizationInterface 接口的类,并实现 Authorize($Token, $RequestScopes = []) 方法
  2. 将实例传递给 Lin\AppPhp\Server\App 类的 WithAuthorization 方法
  3. 调用 Lin\AppPhp\Server\App 类的 AuthorizeRequest 方法来检查授权
require __DIR__ . '/vendor/autoload.php';


use Lin\AppPhp\Server\App;
use Lin\AppPhp\Server\RestfulApp;
use Lin\AppPhp\Authorization\AuthorizationInterface;

// 實作 AuthorizationInterface
class Authorization implements AuthorizationInterface
{
    public function Authorize($Token, $RequestScopes = []): bool
    {
        $AvailableScopes = ['user.read', 'user.create'];
        $AccessScopes = array_intersect($RequestScopes, $AvailableScopes);
        if (count($RequestScopes) > 0 && count($AccessScopes) === 0) {
            return false;
        }
        return true;
    }
}

class User extends RestfulApp
{
    public function OnGet()
    {
        // 檢查權限: 呼叫 App::AuthorizeRequest
        if (!$this->AuthorizeRequest(['user.read'])) {
            return App::UnauthorizedResponse();
        }
        // 回應
        return App::NoContentResponse();
    }
}

// 處理請求
$App = new User();
$App->WithAuthorization(new Authorization())->HandleRequest(App::CreateServerRequest());
$App->SendResponse();
exit;

对于使用 JWT 的 OAuth2 授权,使用 Lin\AppPhp\Authorization\OAuthAuthorization

  1. 创建一个扩展 Lin\AppPhp\Authorization\OAuthAuthorization 类的类,并实现 IsTokenRevoked($JTI) 方法
  2. 将实例传递给 Lin\AppPhp\Server\App 类的 WithAuthorization 方法
  3. 调用 Lin\AppPhp\Server\App 类的 AuthorizeRequest 方法来检查授权
require __DIR__ . '/vendor/autoload.php';


use Lin\AppPhp\Server\App;
use Lin\AppPhp\Server\RestfulApp;
use Lin\AppPhp\Authorization\AuthorizationInterface;

// 實作 AuthorizationInterface
class Authorization extends OAuthAuthorization
{
    public function IsTokenRevoked($JTI)
    {
        // 檢查 token 是否被撤銷
        return false;
    }
}

class User extends RestfulApp
{
    public function OnGet()
    {
        // 檢查權限: 呼叫 App::AuthorizeRequest
        if (!$this->AuthorizeRequest(['user.read'])) {
            return App::UnauthorizedResponse();
        }
        // 回應
        return App::NoContentResponse();
    }
}

// 處理請求
$PublicKeyPath = '/var/www/pubkeys/oauth_pub';
$App = new User();
$App->WithAuthorization(new Authorization($PublicKeyPath))->HandleRequest(App::CreateServerRequest());
$App->SendResponse();
exit;