轻量级且快速的PHP框架,用于构建RESTful API。

1.2.2.1 2022-06-30 13:17 UTC

This package is auto-updated.

Last update: 2024-09-24 14:01:07 UTC


README

Nexus php 是一个轻量级且快速的PHP框架,用于构建RESTful API。

安装

通过Composer轻松安装

composer require nexus-rest-api/nexus

入门

APP

Nexus rest api 使用一个app装饰器来处理所有功能。创建app时,还可以传递配置。配置中值的顺序不重要,但键名重要。

<?php
  use Nexus\App;

  $config = [
    'prefix' => 'api',
    'db_connection' => [
      'host' => 'localhost',
      'user' => 'root',
      'password' => '',
      'database' => 'nexus'
      'port' => 3306 // optional (default 3306)
    ],
    'CORS' =>[
      'allowedOrigins' => ['https://', 'https://*.example.com'],
      'allowedHeaders' => ['x-allowed-header', 'x-other-allowed-header'],
      'allowedMethods' => ['DELETE', 'GET', 'POST', 'PUT'],
      'exposedHeaders' => ['Content-Encoding'],
      'maxAge' => 0
    ] 
  ]

  $app = new App($config);

环境

该框架允许两个不同的环境,即developmentproduction。区别在于,在开发中如果发生错误,将显示堆栈跟踪。环境是app配置的一部分。默认情况下,开发环境被设置为env。

<?php
$config =[
  "ENV" => "production"
]

.htaccess

需要.htaccess文件才能使路由器工作。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]

服务APP

如果您使用Composer,则以下脚本在composer.json文件中,当在终端中输入命令composer start时,将在9000端口启动app。

"scripts": {
  "start": [
    "Composer\\Config::disableProcessTimeout",
    "php -S localhost:9000 -t ./"
  ]
}

路由器和请求

所有请求都由路由器处理,请求使用字符串作为名称,使用回调作为请求的逻辑。路由器以json格式返回数据。请求中参数的顺序和格式不重要。本框架支持以下请求

  • GET
  • POST
  • PUT
  • DELETE

示例

<?php

// Get request
$app->get('/ping', function(Request $request) {
  return [
    'code' => 'OK',
    'message' => 'pong'
  ];
});

// Post request
$app->post('/blog', function(Request $request) {
  return $request->body();
});

// Put request
$app->put('/blog/:id', function(Request $request) {
  $param = $request->params()['id'];
  // do something with $param
});

// Delete request
$app->delete('/blog/:id', function(Request $request) {
  $param = $request->params()['id'];
  // do something with $param
});

重要请求对象参数

路由器组

路由器可以将路由分组并设置该组中所有路由的前缀。注意,目前不支持嵌套组。

示例

  • 请求 /api/health/ping
  • 请求 /api/health/status
<?php
$app->group(['prefix' => '/health'], 

  $app->get('/ping', function(Request $request) {
    return [
      'code' => 'OK',
      'message' => 'pong'
    ];
  })

  ,$app->get('/status', function(Request $request) {
    return [
      'code' => 'OK',
      'message' => 'pong'
    ];
  })
);

中间件

中间件是一个传递给请求的额外函数,在处理请求之前执行。中间件还可以通过不调用$next()函数来阻止路由执行。

示例

<?php
$middleware = function(Request $request, Closure $next) {
  echo "this is a middleware function";
  $next();
};

// The order of the parameters is not important
$app->get('/ping', $middleware, function(Request $request) {
  return [
    'code' => 'OK',
    'message' => 'pong'
  ];
});

数据库连接

在app的配置中,您可以配置app使用的数据库。app允许您使用dbConnect()dbDisconnect()函数按需打开和关闭连接。以下示例使用预处理语句来防止SQL注入。也可以使用普通语句。

<?php

$findUser = function(App $app, String $id){
  $app::dbConnect();     // Opens the connection with the database
    // Prepared statement
    $statement = $app()::db()->prepare(
      'SELECT * 
       FROM user 
       WHERE id = ?' 
    );
    $statement->bind_param('ss', $id);
    $statement->execute();
    $result = $statement->get_result()->fetch_all(MYSQLI_ASSOC);
  $app::dbExit();  // Closes the connection with te database
  return $result;
};

模块

如果您想向app添加额外功能,例如日志记录器。这可以通过使用append模块方法完成。这需要一个键(字符串)和一个值(对象或闭包)。

// Appending the module
$app::appendModule('logger', new Logger());

// Accessing the appended module 
$logger = $app:requireModule('logger');
$logger::logAction('...');

错误处理

路由器内置了错误处理,此框架提供了一些可以在应用程序中抛出的异常。这些异常将由路由器捕获,并将错误消息发送给最终用户。

不同的异常

<?php
// Use case
$app->get("/users", function(Request $request) {
  if(!validateToken($request->httpAuthorization))
    throw new UnauthorizedException("User is not logged in");
}); 

优化应用程序

完成应用程序开发后,您可以将此脚本和配置选项添加到您的composer.json文件中,以优化Composer自动加载器。**注意:在开发期间使用构建命令可能会导致问题**!

"scripts": {
        "start": [
            "Composer\\Config::disableProcessTimeout",
            "php -S localhost:9000 -t ./"
        ],
        "build": [
            "composer update --optimize-autoloader",
            "composer dump-autoload --optimize"
        ]
    },
    "config": {
        "optimize-autoloader": true
    }

建议与该框架一起使用的包

  • firebase/php-jwt
  • symfony/dotenv
  • ramsey/uuid