diff --git a/config/octane.php b/config/octane.php index 8b578aef6..326f80964 100644 --- a/config/octane.php +++ b/config/octane.php @@ -15,6 +15,7 @@ use Laravel\Octane\Listeners\DisconnectFromDatabases; use Laravel\Octane\Listeners\EnsureUploadedFilesAreValid; use Laravel\Octane\Listeners\EnsureUploadedFilesCanBeMoved; +use Laravel\Octane\Listeners\FlushOnce; use Laravel\Octane\Listeners\FlushTemporaryContainerInstances; use Laravel\Octane\Listeners\FlushUploadedFiles; use Laravel\Octane\Listeners\ReportException; @@ -101,6 +102,7 @@ ], OperationTerminated::class => [ + FlushOnce::class, FlushTemporaryContainerInstances::class, // DisconnectFromDatabases::class, // CollectGarbage::class, diff --git a/src/Listeners/FlushOnce.php b/src/Listeners/FlushOnce.php new file mode 100644 index 000000000..3a0af709c --- /dev/null +++ b/src/Listeners/FlushOnce.php @@ -0,0 +1,20 @@ +markTestSkipped('Once is only supported in Laravel 11+'); + } + + [$app, $worker] = $this->createOctaneContext([ + Request::create('/', 'GET'), + Request::create('/', 'GET'), + Request::create('/', 'GET'), + ]); + + $results = []; + + $app['router']->middleware('web')->get('/', function () use (&$results) { + $results[] = my_rand(); + }); + + $worker->run(); + + $this->assertTrue($results[0] !== $results[1]); + $this->assertTrue($results[0] !== $results[2]); + $this->assertTrue($results[1] !== $results[2]); + } +} + +function my_rand() +{ + return once(fn () => rand(1, PHP_INT_MAX)); +}