We are thrilled to announce the official release of v0.16.0
to the public! 🎉🚀
Additionally, we are making all previous tagged versions available to simplify the upgrade process.
In addition to the release of v0.16.0
, this update includes all prior tagged releases.
This release includes exciting new features such as improved performance, additional options for access logging, updates to our documentation and nginx + Apache configurations, as well as many more internal improvements to our test suite and integration tests.
-
Feature: Improve performance by skipping
AccessLogHandler
if it writes to/dev/null
. (#248 by @clue) -
Feature: Add optional
$path
argument forAccessLogHandler
. (#247 by @clue) -
Minor documentation improvements and update nginx + Apache configuration. (#245 and #251 by @clue)
-
Improve test suite with improved directory structure for integration tests. (#250 by @clue)
-
Feature: Full PHP 8.3 compatibility. (#244 by @clue)
-
Feature: Add
App::__invoke()
method to enable custom integrations. (#236 by @clue) -
Feature: Improve performance by only using
FiberHandler
forReactiveHandler
. (#237 by @clue) -
Minor documentation improvements. (#242 by @yadaiio)
-
Feature: Improve Promise v3 support and use Promise v3 template types. (#233 and #235 by @clue)
-
Feature: Improve handling
OPTIONS *
requests. (#226 by @clue) -
Refactor logging into new
LogStreamHandler
and reactive server logic into newReactiveHandler
. (#222 and #224 by @clue) -
Improve test suite and ensure 100% code coverage. (#217, #221, #225 and #228 by @clue)
-
Feature: Forward compatibility with upcoming Promise v3. (#188 by @clue)
-
Feature: Full PHP 8.2 compatibility. (#194 and #207 by @clue)
-
Feature: Load environment variables from
$_ENV
,$_SERVER
andgetenv()
. (#205 by @clue) -
Feature: Update to support
Content-Length
response header onHEAD
requests. (#186 by @clue) -
Feature / Fix: Consistent handling for HTTP responses with multiple header values (PHP SAPI). (#214 by @pfk84)
-
Fix: Respect explicit response status code when Location response header is given (PHP SAPI). (#191 by @jkrzefski)
-
Minor documentation improvements. (#189 by @clue)
-
Add PHPStan to test environment on level
max
and improve type definitions. (#200, #201 and #204 by @clue) -
Improve test suite and report failed assertions. (#199 by @clue and #208 by @SimonFrings)
-
Feature: Support loading environment variables from DI container configuration. (#184 by @clue)
-
Feature: Support typed container variables for container factory functions. (#178, #179 and #180 by @clue)
-
Feature: Support nullable and
null
arguments and default values for DI container configuration. (#181 and #183 by @clue) -
Feature: Support untyped and
mixed
arguments for container factory. (#182 by @clue)
-
Feature: Make
AccessLogHandler
andErrorHandler
part of public API. (#173 and #174 by @clue)<?php require __DIR__ . '/../vendor/autoload.php'; $app = new FrameworkX\App( new FrameworkX\AccessLogHandler(), new FrameworkX\ErrorHandler() ); // Register routes here, see routing… $app->run();
-
Feature: Support loading
AccessLogHandler
andErrorHandler
fromContainer
. (#175 by @clue) -
Feature: Read
$remote_addr
attribute forAccessLogHandler
(trusted proxies). (#177 by @clue) -
Internal refactoring to move all handlers to
Io
namespace. (#176 by @clue) -
Update test suite to remove deprecated
utf8_decode()
(PHP 8.2 preparation). (#171 by SimonFrings)
-
Feature: Built-in support for fibers on PHP 8.1+ with stable reactphp/async. (#168 by @clue)
$app->get('/book/{isbn}', function (Psr\Http\Message\ServerRequestInterface $request) use ($db) { $isbn = $request->getAttribute('isbn'); $result = await($db->query( 'SELECT title FROM book WHERE isbn = ?', [$isbn] )); assert($result instanceof React\MySQL\QueryResult); $data = $result->resultRows[0]['title']; return React\Http\Message\Response::plaintext( $data ); });
-
Feature: Support PSR-11 container interface by using DI container as adapter. (#163 by @clue)
-
Minor documentation improvements. (#158 by @clue and #160 by @SimonFrings)
-
Feature: Add signal handling support for
SIGINT
andSIGTERM
. (#150 by @clue) -
Feature: Improve error output for exception messages with special characters. (#131 by @clue)
-
Add new documentation chapters for Docker containers and HTTP redirecting. (#138 by SimonFrings and #136, #151 and #156 by @clue)
-
Minor documentation improvements. (#143 by @zf2timo, #153 by @mattschlosser and #129 and #154 by @clue)
-
Improve test suite and add tests for
Dockerfile
instructions. (#148 and #149 by @clue)
-
Feature: Automatically start new fiber for each request on PHP 8.1+. (#117 by @clue)
-
Feature: Add fiber compatibility mode for PHP < 8.1. (#128 by @clue)
-
Improve documentation and update installation instructions for react/async. (#116 and #126 by @clue and #124, #125 and #127 by @SimonFrings)
-
Improve fiber tests to avoid now unneeded
await()
calls. (#118 by @clue)
-
Feature: Update to use HTTP status code constants and JSON/HTML response helpers. (#114 by @clue)
$app->get('/users/{name}', function (Psr\Http\Message\ServerRequestInterface $request) { return React\Http\Message\Response::plaintext( "Hello " . $request->getAttribute('name') . "!\n" ); });
-
Feature / Fix: Update to improve protocol handling for HTTP responses with no body. (#113 by @clue)
-
Minor documentation improvements. (#112 by @SimonFrings and #115 by @netcarver)
-
Feature: Support automatic dependency injection by using class names (DI container). (#89, #92 and #94 by @clue)
<?php require __DIR__ . '/../vendor/autoload.php'; $app = new FrameworkX\App(Acme\Todo\JsonMiddleware::class); $app->get('/', Acme\Todo\HelloController::class); $app->get('/users/{name}', Acme\Todo\UserController::class); $app->run();
-
Feature: Add support for explicit DI container configuration. (#95, #96 and #97 by @clue)
<?php require __DIR__ . '/../vendor/autoload.php'; $container = new FrameworkX\Container([ Acme\Todo\HelloController::class => fn() => new Acme\Todo\HelloController(); Acme\Todo\UserController::class => function (React\Http\Browser $browser) { // example UserController class requires two arguments: // - first argument will be autowired based on class reference // - second argument expects some manual value return new Acme\Todo\UserController($browser, 42); } ]); // …
-
Feature: Refactor to use
$_SERVER
instead ofgetenv()
. (#91 by @bpolaszek) -
Minor documentation improvements. (#100 by @clue)
-
Update test suite to use stable PHP 8.1 Docker image. (#90 by @clue)
-
Feature / BC break: Simplify
App
by always using default loop, drop optional loop instance. (#88 by @clue)// old $loop = React\EventLoop\Loop::get(); $app = new FrameworkX\App($loop); // new (already supported before) $app = new FrameworkX\App();
-
Add documentation for manual restart of systemd service and chapter for Caddy deployment. (#87 by @SimonFrings and #82 by @francislavoie)
-
Improve documentation, remove leftover
$loop
references and fix typos. (#72 by @shuvroroy, #80 by @Ivanshamir, #81 by @clue and #83 by @rattuscz)
We are excited to announce the official release of Framework X to the public! 🎉🚀 This release includes exciting new features such as full compatibility with PHP 8.1, improvements to response handling, and enhanced documentation covering nginx, Apache, and async database usage.
-
Feature: Announce Framework X public beta. (#64 by @clue)
-
Feature: Full PHP 8.1 compatibility. (#58 by @clue)
-
Feature: Improve
AccessLogHandler
and fix response size for streaming response body. (#47, #48, #49 and #50 by @clue) -
Feature / Fix: Skip sending body and
Content-Length
for responses with no body. (#51 by @clue) -
Feature / Fix: Consistently reject proxy requests and handle
OPTIONS *
requests. (#46 by @clue) -
Add new documentation chapters for nginx, Apache and async database. (#57, #59 and #60 by @clue)
-
Improve documentation, examples and describe HTTP caching and output buffering. (#52, #53, #55, #56, #61, #62 and #63 by @clue)
-
Feature: Add support for global middleware. (#23 by @clue)
-
Feature: Improve error output and refactor internal error handler. (#37, #39 and #41 by @clue)
-
Feature: Support changing listening address via new
X_LISTEN
environment variable. (#38 by @clue) -
Feature: Update to new ReactPHP HTTP and Socket API. (#26 and #29 by @HLeithner and #34 by @clue)
-
Feature: Refactor to use new
AccessLogHandler
,RouteHandler
,RedirectHandler
andSapiHandler
. (#42, #43, #44 and #45 by @clue) -
Fix: Fix path filter regex. (#27 by @HLeithner)
-
Add documentation for async middleware and systemd service unit configuration. (#24 by @Degra1991 and #32, #35, #36 and #40 by @clue)
-
Improve test suite and run tests on Windows with PHPUnit. (#31 by @SimonFrings and #28 and #33 by @clue)
-
Feature: Simplify
App
usage by makingLoopInterface
argument optional. (#22 by @clue)// old (still supported) $loop = React\EventLoop\Factory::create(); $app = new FrameworkX\App($loop); // new (using default loop) $app = new FrameworkX\App();
-
Feature: Add middleware support. (#18 by @clue)
-
Feature: Refactor and simplify route dispatcher. (#21 by @clue)
-
Feature: Add Generator-based coroutine implementation. (#17 by @clue)
-
Minor documentation improvements. (#15, #16 and #19 by @clue)
We're excited to announce the release of the first version of Framework X in private beta! This version marks the starting point of our project and is the first of many milestones for making async PHP easier than ever before.
-
Release Framework X, major documentation overhaul and improve examples. (#14, #13 and #2 by @clue)
-
Feature: Support running behind nginx and Apache (PHP-FPM and mod_php). (#3, #11 and #12 by @clue)
-
Feature / Fix: Consistently parse request URI and improve URL handling. (#4, #5, #6 and #7 by @clue)
-
Feature: Rewrite
FilesystemHandler
, improve file access and directory listing. (#8 and #9 by @clue) -
Feature: Add
any()
router method to match any request method. (#10 by @clue)