phpnova / rest
用于处理HTTP请求的库
此包的官方仓库似乎已丢失,因此该包已被冻结。
dev-main
2023-04-29 13:50 UTC
Requires (Dev)
- composer/composer: ^2.5
This package is auto-updated.
Last update: 2023-12-29 15:22:55 UTC
README
- PHP ^8.2.0
- 本地服务器,可以是xammp、wanserver、symfony
建议使用symfony启动测试服务器
配置
app.json
该app.config文件包含应用程序的基本配置
{
"version": "1.0.0.BETA",
"src": "src/",
"files": "files/",
"databases": {
"my_db": {
"type": "mysql",
"timezone": "+00:00"
}
}
}
app.env.json
该app.env.json文件包含应用程序运行时的环境配置,因此不建议将该文件存放在仓库中,因为这些数据会根据部署的位置而变化。
内容涉及API的CORS和数据库连接数据。
如果在运行应用程序时检测到app.env.json文件不存在,则会自动根据app.json的初始配置创建该文件。
{
"cors": {
"/": "*"
},
"databases": {
"my_db": {
"host": "localhost",
"user": "root",
"password": "",
"database": "db_name"
}
}
}
Index.php
应用程序入口
请记住配置您的.htaccess文件,以便将URL入口指向index.php
基本示例
RewriteEngine On
RewriteRule ^(.*) index.php [L,QSA
<?php use Phpnova\Rest\AppConfig; use Phpnova\Rest\Application; use Phpnova\Rest\Routing\Router; require_once __DIR__ . '/vendor/autoload.php'; $app = new Application(); $app->use('/', fn() => require __DIR__ . '/app/router.php'); $app->setHandleRequest(require __DIR__ . '/app/Config/HandleResponse.php'); $app->setHandleError(require __DIR__ . '/app/Config/HandleErrors.php'); $app->setHandleException(require __DIR__ . '/app/Config/HandleException.php'); $app->run();
定义路由
路由是通过Phpnova\Rest\Routing\Router::class类的静态方法定义的。
use Phpnova\Rest\Http\Request; use Phpnova\Rest\Http\Response; use Phpnova\Rest\Routing\Router; Router::get(path: 'hola-mundo', function(){ return "Hola mundo"; }); Router::post(path: 'hola-mundo', function(){ return "Hola mundo POST"; }); # Sub rutas Router::use('/saludar', function(){ Router::get('/', function() { return "Hola, ¿Como estas?"; }); # Con parametros en la ruta utilizaremos : mas el nombre Router::get('/:name', function(string $name){ return "Hola $name, ¿Como estas?"; }); });
控制器
控制器是针对每个路由要执行的函数,可以在注册路由时定义,也可以引用存储方法的类。
函数示例
# En este haca la función se ejecutar para entrada `/saludar/:name/` # Ruta ingresada de prueba `/saludar/Johan/` function(){ return "Hola, ¿Como estas?"; } # Salia resultante: "Hola, ¿Como estas?"
要访问在URL中定义的参数
# Si quicerarmos haceder al parametro de la ruta `:name`, # basta un parametro en la función con el mismo nombre function(string $name){ return "Hola $name, ¿Como estas?"; } # Salida resultante: "Hola Johan, ¿como estar?"
要访问查询的更多信息,我们需要定义一个类型为Phpnova\Rest\Http\Request的参数。
function(Phpnova\Rest\Http\Request $req){ return "Hola"; }
要将body内容加载到函数的参数中,请使用Phpnova\Rest\Http\Body属性,并将其放在要加载内容的参数之前。
use Phpnova\Rest\Http\Body function(#[Body]mixed $body){ return $body; }
任何引用类的参数都会自动实例化,因此建议不要在类的构造函数中请求参数,以确保正确运行。