designcise/bitframe
BitFrame PHP 微框架
Requires
- php: >=8.2
- ext-json: *
- psr/container: ^2.0
- psr/http-factory: ^1.0
- psr/http-message: ^2.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- mockery/mockery: ^1.3
- nyholm/psr7: ^1.8
- phpmd/phpmd: @stable
- phpstan/phpstan: *
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: 3.*
Suggests
- ext-fileinfo: For supporting embedded files when using BitFrame\Http\Message\FileResponse
- ext-libxml: For out-of-the-box XML support, please install libxml extension
- ext-simplexml: For out-of-the-box XML support, please install simplexml extension
- designcise/bitframe-fastroute: Add routing support to your App
- nyholm/psr7: Add PSR-7 / PSR-17 based HTTP Messaging support for your App
README
BitFrame PHP 微框架
这是一个高度可定制的PSR-15 / PSR-7兼容的基于中间件的PHP微框架,附带一个简单的基于PSR-11的DI容器,用于在应用程序中共享服务和数据。它是
- 易于学习且直观;
- 基于标准;
- 设计简单;
- 无冗余;
- 非侵入式;
- 可定制、模块化和易于扩展。
先决条件
- PHP 8.2+;
- 支持URL重写的服务器(例如Apache、Nginx等)。
如何开始?
您可以通过几个简单的步骤开始
- 设置您的环境;
- 安装
composer
依赖项; - 创建您的第一个“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;
}
请根据您的项目设置进行更改。例如,确保listen
、root
、fastcgi_pass
、*_log
等根据您的项目正确设置。
2. 安装Composer依赖项
您可以使用如下方式使用composer require
$ composer require "designcise/bitframe":^4.0
或者,您还可以在您的composer.json
文件中添加包依赖项。
请注意,您必须在您的composer依赖项中包含一个PSR-17工厂。例如,nyholm/psr7和guzzle/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();
从上面的代码中,您可以看到应用程序使用了两个中间件
- 一个PSR-15中间件
\BitFrame\Emitter\SapiEmitter
(BitFrame包附带),它允许向请求的用户代理(如浏览器)发出HTTP响应; - 一个闭包中间件,用于将
Hello World!
写入HTTP响应流。
这当然是一个非常基础的例子。在实际应用中,设置会比这复杂得多。例如,您可以通过使用额外的PSR-15中间件,如路由器、错误处理器等来扩展功能。有关如何设计您的应用的建议(以及快速入门),请查看简单的dockerized模板示例。
测试
要运行测试,您可以使用以下命令
贡献
请参阅CONTRIBUTING以获取详细信息。
- 在https://github.com/designcise/bitframe/issues提交问题
- 将补丁提交至https://github.com/designcise/bitframe/pulls
许可证
请参阅许可证文件获取许可信息。