designcise/bitframe

BitFrame PHP 微框架

v4.0.0 2023-07-01 23:36 UTC

README

CI Maintainability Test Coverage

BitFrame PHP 微框架

这是一个高度可定制的PSR-15 / PSR-7兼容的基于中间件的PHP微框架,附带一个简单的基于PSR-11的DI容器,用于在应用程序中共享服务和数据。它是

  1. 易于学习且直观;
  2. 基于标准;
  3. 设计简单;
  4. 无冗余;
  5. 非侵入式;
  6. 可定制、模块化和易于扩展。

先决条件

  1. PHP 8.2+;
  2. 支持URL重写的服务器(例如Apache、Nginx等)。

如何开始?

您可以通过几个简单的步骤开始

  1. 设置您的环境;
  2. 安装composer依赖项;
  3. 创建您的第一个“Hello World”应用。

有关完整示例,请查看简单的dockerized模板

1. 设置您的环境

您可以根据以下最小的Apache和Nginx配置开始

Apache

创建一个至少包含以下代码的.htaccess文件

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

这将在Apache中设置指令,将所有HTTP请求重定向到包含您主要应用程序代码的index.php前端控制器。

Nginx

Nginx中的以下配置将帮助您设置重写路径到您的应用程序前端控制器(即index.php)的指令

server {
  listen 80;
  server_name 127.0.0.1;

  root /var/www/html/public;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass app:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;
}

请根据您的项目设置进行更改。例如,确保listenrootfastcgi_pass*_log等根据您的项目正确设置。

2. 安装Composer依赖项

您可以使用如下方式使用composer require

$ composer require "designcise/bitframe":^4.0

或者,您还可以在您的composer.json文件中添加包依赖项。

请注意,您必须在您的composer依赖项中包含一个PSR-17工厂。例如,nyholm/psr7guzzle/psr7是这些工厂的好例子——如果您包含这些中的任何一个,它们将被BitFrame自动获取。对于任何其他PSR-17工厂实现,您可以在实例化\BitFrame\App之前通过\BitFrame\Factory\HttpFactory::addFactory()方法添加它。

3. 创建您的第一个“Hello World”应用

如果您曾经使用过基于中间件的框架,您会感到很自在。一个“Hello World”应用看起来可能如下所示

<?php

require 'vendor/autoload.php';

use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use BitFrame\App;
use BitFrame\Emitter\SapiEmitter;

// 1. Instantiate the App
$app = new App();

$middleware = function (ServerRequestInterface $request, RequestHandlerInterface $handler) {
    $response = $handler->handle($request);
    $response->getBody()->write('Hello World!');
    return $response;
};

// 2. Add middleware
$app->use([
    SapiEmitter::class,
    $middleware,
]);

// 3. Run the application
$app->run();

从上面的代码中,您可以看到应用程序使用了两个中间件

  1. 一个PSR-15中间件\BitFrame\Emitter\SapiEmitter(BitFrame包附带),它允许向请求的用户代理(如浏览器)发出HTTP响应;
  2. 一个闭包中间件,用于将Hello World!写入HTTP响应流。

这当然是一个非常基础的例子。在实际应用中,设置会比这复杂得多。例如,您可以通过使用额外的PSR-15中间件,如路由器错误处理器等来扩展功能。有关如何设计您的应用的建议(以及快速入门),请查看简单的dockerized模板示例

测试

要运行测试,您可以使用以下命令

贡献

请参阅CONTRIBUTING以获取详细信息。

许可证

请参阅许可证文件获取许可信息。