geekcow / fony-core
Fony PHP API 的核心类
0.0.50
2023-05-03 15:33 UTC
Requires
- geekcow/dbcore: 1.0.*
- psr/log: >=1.1.3
Requires (Dev)
- mockery/mockery: 1.3.1
- phpunit/phpunit: ^8
- squizlabs/php_codesniffer: 3.*
- dev-master
- 0.0.50
- 0.0.49
- 0.0.48
- 0.0.47
- 0.0.46
- 0.0.45
- 0.0.44
- 0.0.43
- 0.0.42
- 0.0.41
- 0.0.39
- 0.0.38
- 0.0.37
- 0.0.36
- 0.0.35
- 0.0.34
- 0.0.33
- 0.0.32
- 0.0.31
- 0.0.30
- 0.0.29
- 0.0.28
- 0.0.27
- 0.0.26
- 0.0.25
- 0.0.24
- 0.0.23
- 0.0.22
- 0.0.21
- 0.0.20
- 0.0.19
- 0.0.18
- 0.0.17
- 0.0.16
- 0.0.13
- 0.0.12
- 0.0.11
- 0.0.10
- 0.0.9
- 0.0.8
- 0.0.7
- 0.0.6
- 0.0.5
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.2-alpha
- 0.0.1
- 0.0.1-alpha
This package is auto-updated.
Last update: 2024-09-03 18:44:47 UTC
README
Fony PHP API 框架的核心类
用法
您可以通过声明一个基础 API 类(如下例所示)将 fony 核心添加为 API 的依赖项:
<?php require 'vendor/autoload.php'; define('MY_DOC_ROOT', __DIR__); define('MY_ASSET_ROOT', __DIR__); use Geekcow\FonyCore\FonyApi; use {PROJECTNAMESPACE}\router; // Requests from the same server don't have a HTTP_ORIGIN header if (!array_key_exists('HTTP_ORIGIN', $_SERVER)) { $_SERVER['HTTP_ORIGIN'] = $_SERVER['SERVER_NAME']; } try { $router = new Router('{PROJECTCONFIGFILE}'); $API = new FonyApi($_REQUEST['request'], $router); // if you want to have the origin set: // $API = new FonyApi($_REQUEST['request'], $router, $_SERVER['HTTP_ORIGIN']); echo $API->processAPI(); } catch (\Exception $e) { echo json_encode(Array('error' => $e->getMessage())); } ?>
您的 Router
类应该是此处提供的 FonyApi
类的实现。
Router
的工作方式
Router
类的工作方式如下
- 构造函数会遍历请求的端点。因此,一个动作类(也称为控制器)可以预先放置。
- 端点将执行一个与请求同名的函数。例如,如果端点是
/api/user/:id
,则我们将要执行的端点是user
,因此需要定义一个user()
函数。 - 此外,如果端点是用破折号编写的,则端点应该用驼峰式编写。
这是一个 Router
类的示例
<?php namespace {PROJECTNAMESPACE}; use Geekcow\FonyCore\Controller\GenericController; use Geekcow\FonyCore\FonyRouter; use Geekcow\FonyCore\Utils\SessionUtils; use {PROJECTNAMESPACE}\model\TestModel; class Router extends FonyRouter { public function __construct($config_file) { parent::__construct($config_file); } public function prestageEndpoints($endpoint, $request){ parent::prestageEndpoints($endpoint, $request); switch ($this->endpoint) { case 'generic-controller-endpoint': $this->action = new GenericController(); $this->action->setRequest($request); $this->action->setModel(new TestModel()); $this->action->setFilter(['fields', 'that', 'you', 'do not', 'want', 'to', 'show']); $this->setAllowedRoles(Allow::CUSTOMROLE()); break; case 'generic-actionable-controller-endpoint': $this->action = new GenericActionController(); $this->action->setRequest($request); $this->action->setModel(new TestModel()); $this->action->setFilter(['fields', 'that', 'you', 'do not', 'want', 'to', 'show']); $this->setAllowedRoles(Allow::CUSTOMROLE()); break; } } /** * Shows a welcome message * * @return string * */ //WELCOME MESSAGE public function welcome() { if ($this->method == 'GET') { return "WELCOME TO FONY PHP"; } else { return "Invalid Method"; } } /** * Executes only a POST operation. * * @return JSON Authenticated response with token * */ public function genericControllerEndpoint() { switch ($this->method) { case 'POST': $this->action->doPost($this->args, $this->verb); $this->response_code = $this->action->response['code']; return $this->action->response; break; case 'OPTIONS': exit(0); break; default: $this->response_code = 405; return "Invalid method"; break; } } /** * Executes an endpoint using the default behavior. * * @return JSON response * */ public function genericActionableControllerEndpoint() { return $this->executesCall(); } }
会话处理
默认情况下,Fony 使用 OAuth2 身份验证,因此它依赖于安装 Fony 所需的配置文件
- 参数列表待定
或者您可以定义自己的身份验证机制(例如 fony-auth 项目),在那里您可以创建一个实现 AuthenticatorInterface
的身份验证类,并在 Router 构造函数中初始化它
$sessionInstance = SessionUtils::getInstance(new CustomAuthenticatorClass());
示例
很快将有一个示例存储库可用