class Kernel implements Kernel

Traits

Constants

protected REQUEST_STARTED_AT_CONTEXT_KEY

Context key for the current request's start time.

Stored per-coroutine — a singleton Kernel handles concurrent requests and an instance property would be overwritten by whichever coroutine called handle() most recently.

Properties

protected Application $app

The application implementation.

protected Router $router

The router instance.

protected string[] $bootstrappers

The bootstrap classes for the application.

protected array<int, class-string|string> $middleware

The application's middleware stack.

protected array<string, array<int, class-string|string>> $middlewareGroups

The application's route middleware groups.

protected array<string, class-string|string> $middlewareAliases

The application's middleware aliases.

protected array<int, array{threshold: float|int, handler: callable}> $requestLifecycleDurationHandlers

All of the registered request duration handlers.

protected array<string, bool> $terminableMiddleware

Whether each middleware name resolves to a terminable instance.

protected array<int, class-string|string> $middlewarePipelineStack

The global middleware stack represented by the reusable pipeline.

protected Closure|null $middlewarePipeline

The reusable global middleware pipeline.

protected string[] $middlewarePriority

The priority-sorted list of middleware.

Methods

int
secondsUntil(DateInterval|DateTimeInterface|int $delay)

Get the number of seconds until the given DateTime.

int
availableAt(DateInterval|DateTimeInterface|int|null $delay = 0)

Get the "available at" UNIX timestamp.

parseDateInterval(DateInterval|DateTimeInterface|int|null $delay)

If the given value is an interval, convert it to a DateTime instance.

int
currentTime()

Get the current system time as a UNIX timestamp.

string
runTimeForHumans(float $startTime, float|null $endTime = null)

Given a start time, format the total run time for human readability.

__construct(Application $app, Router $router)

Create a new HTTP kernel instance.

Response
handle(Request $request)

Handle an incoming HTTP request.

Response
sendRequestThroughRouter(Request $request)

Send the given request through the middleware / router.

void
bootstrap()

Bootstrap the application for HTTP requests.

dispatchToRouter()

Get the route dispatcher callback.

void
terminate(Request $request, Response $response)

Perform any final actions for the request lifecycle.

void
terminateMiddleware(Request $request, Response $response)

Call the terminate method on any terminable middleware.

void
whenRequestLifecycleIsLongerThan(DateTimeInterface|CarbonInterval|float|int $threshold, callable $handler)

Register a callback to be invoked when the request lifecycle duration exceeds a given amount of time.

requestStartedAt()

Get when the kernel started handling the current request.

array
gatherRouteMiddleware(Request $request)

Gather the route middleware for the given request.

array
parseMiddleware(string $middleware)

Parse a middleware string to get the name and parameters.

bool
hasMiddleware(string $middleware)

Determine if the kernel has a given middleware.

prependMiddleware(string $middleware)

Add a new middleware to the beginning of the stack if it does not already exist.

pushMiddleware(string $middleware)

Add a new middleware to end of the stack if it does not already exist.

prependMiddlewareToGroup(string $group, string $middleware)

Prepend the given middleware to the given middleware group.

appendMiddlewareToGroup(string $group, string $middleware)

Append the given middleware to the given middleware group.

prependToMiddlewarePriority(string $middleware)

Prepend the given middleware to the middleware priority list.

appendToMiddlewarePriority(string $middleware)

Append the given middleware to the middleware priority list.

addToMiddlewarePriorityBefore(string|array $before, string $middleware)

Add the given middleware to the middleware priority list before other middleware.

addToMiddlewarePriorityAfter(string|array $after, string $middleware)

Add the given middleware to the middleware priority list after other middleware.

addToMiddlewarePriorityRelative(string|array $existing, string $middleware, bool $after = true)

Add the given middleware to the middleware priority list relative to other middleware.

void
syncMiddlewareToRouter()

Sync the current state of the middleware to the router.

array
getMiddlewarePriority()

Get the priority-sorted list of middleware.

array
bootstrappers()

Get the bootstrap classes for the application.

void
reportException(Throwable $e, array $context = [])

Report the exception to the exception handler.

Response
renderException(Request $request, Throwable $e)

Render the exception to a response.

array
getGlobalMiddleware()

Get the application's global middleware.

setGlobalMiddleware(array $middleware)

Set the application's global middleware.

array
getMiddlewareGroups()

Get the application's route middleware groups.

setMiddlewareGroups(array $groups)

Set the application's middleware groups.

array
getMiddlewareAliases()

Get the application's route middleware aliases.

setMiddlewareAliases(array $aliases)

Set the application's route middleware aliases.

setMiddlewarePriority(array $priority)

Set the application's middleware priority.

getApplication()

Get the application instance.

setApplication(Application $app)

Set the application instance.

Details

in InteractsWithTime at line 17
protected int secondsUntil(DateInterval|DateTimeInterface|int $delay)

Get the number of seconds until the given DateTime.

Parameters

DateInterval|DateTimeInterface|int $delay

Return Value

int

in InteractsWithTime at line 29
protected int availableAt(DateInterval|DateTimeInterface|int|null $delay = 0)

Get the "available at" UNIX timestamp.

Parameters

DateInterval|DateTimeInterface|int|null $delay

Return Value

int

in InteractsWithTime at line 47
protected DateTimeInterface|int parseDateInterval(DateInterval|DateTimeInterface|int|null $delay)

If the given value is an interval, convert it to a DateTime instance.

Parameters

DateInterval|DateTimeInterface|int|null $delay

Return Value

DateTimeInterface|int

in InteractsWithTime at line 63
protected int currentTime()

Get the current system time as a UNIX timestamp.

Return Value

int

in InteractsWithTime at line 71
protected string runTimeForHumans(float $startTime, float|null $endTime = null)

Given a start time, format the total run time for human readability.

Parameters

float $startTime
float|null $endTime

Return Value

string

at line 148
__construct(Application $app, Router $router)

Create a new HTTP kernel instance.

Parameters

Application $app
Router $router

at line 159
Response handle(Request $request)

Handle an incoming HTTP request.

Parameters

Request $request

Return Value

Response

at line 200
protected Response sendRequestThroughRouter(Request $request)

Send the given request through the middleware / router.

Parameters

Request $request

Return Value

Response

at line 226
void bootstrap()

Bootstrap the application for HTTP requests.

Return Value

void

at line 241
protected Closure dispatchToRouter()

Get the route dispatcher callback.

Uses RequestContext::set() instead of Laravel's $this->app->instance('request', $request) because instance() writes to process-global $instances which would race across coroutines. The HttpServiceProvider's bind('request', fn () => RequestContext::get()) ensures all resolution paths return the coroutine-local request.

Return Value

Closure

at line 253
void terminate(Request $request, Response $response)

Perform any final actions for the request lifecycle.

Parameters

Request $request
Response $response

Return Value

void

at line 341
protected void terminateMiddleware(Request $request, Response $response)

Call the terminate method on any terminable middleware.

Parameters

Request $request
Response $response

Return Value

void

at line 396
void whenRequestLifecycleIsLongerThan(DateTimeInterface|CarbonInterval|float|int $threshold, callable $handler)

Register a callback to be invoked when the request lifecycle duration exceeds a given amount of time.

Parameters

DateTimeInterface|CarbonInterval|float|int $threshold
callable $handler

Return Value

void

at line 415
CarbonImmutable|null requestStartedAt()

Get when the kernel started handling the current request.

Return Value

CarbonImmutable|null

at line 433
protected array gatherRouteMiddleware(Request $request)

Gather the route middleware for the given request.

Parameters

Request $request

Return Value

array

at line 445
protected array parseMiddleware(string $middleware)

Parse a middleware string to get the name and parameters.

Parameters

string $middleware

Return Value

array

at line 459
bool hasMiddleware(string $middleware)

Determine if the kernel has a given middleware.

Parameters

string $middleware

Return Value

bool

at line 473
Kernel prependMiddleware(string $middleware)

Add a new middleware to the beginning of the stack if it does not already exist.

Boot-only. Middleware persists in the singleton Kernel's global stack for the worker lifetime and runs on every subsequent request across all coroutines.

Parameters

string $middleware

Return Value

Kernel

at line 491
Kernel pushMiddleware(string $middleware)

Add a new middleware to end of the stack if it does not already exist.

Boot-only. Middleware persists in the singleton Kernel's global stack for the worker lifetime and runs on every subsequent request across all coroutines.

Parameters

string $middleware

Return Value

Kernel

at line 510
Kernel prependMiddlewareToGroup(string $group, string $middleware)

Prepend the given middleware to the given middleware group.

Boot-only. The middleware group persists in the singleton Kernel for the worker lifetime and runs on every subsequent request matching the group.

Parameters

string $group
string $middleware

Return Value

Kernel

Exceptions

InvalidArgumentException

at line 535
Kernel appendMiddlewareToGroup(string $group, string $middleware)

Append the given middleware to the given middleware group.

Boot-only. The middleware group persists in the singleton Kernel for the worker lifetime and runs on every subsequent request matching the group.

Parameters

string $group
string $middleware

Return Value

Kernel

Exceptions

InvalidArgumentException

at line 559
Kernel prependToMiddlewarePriority(string $middleware)

Prepend the given middleware to the middleware priority list.

Boot-only. The middleware priority list persists in the singleton Kernel for the worker lifetime and affects middleware ordering for every subsequent request.

Parameters

string $middleware

Return Value

Kernel

at line 579
Kernel appendToMiddlewarePriority(string $middleware)

Append the given middleware to the middleware priority list.

Boot-only. The middleware priority list persists in the singleton Kernel for the worker lifetime and affects middleware ordering for every subsequent request.

Parameters

string $middleware

Return Value

Kernel

at line 600
Kernel addToMiddlewarePriorityBefore(string|array $before, string $middleware)

Add the given middleware to the middleware priority list before other middleware.

Boot-only. The middleware priority list persists in the singleton Kernel for the worker lifetime and affects middleware ordering for every subsequent request.

Parameters

string|array $before
string $middleware

Return Value

Kernel

at line 615
Kernel addToMiddlewarePriorityAfter(string|array $after, string $middleware)

Add the given middleware to the middleware priority list after other middleware.

Boot-only. The middleware priority list persists in the singleton Kernel for the worker lifetime and affects middleware ordering for every subsequent request.

Parameters

string|array $after
string $middleware

Return Value

Kernel

at line 626
protected Kernel addToMiddlewarePriorityRelative(string|array $existing, string $middleware, bool $after = true)

Add the given middleware to the middleware priority list relative to other middleware.

Parameters

string|array $existing
string $middleware
bool $after

Return Value

Kernel

at line 661
protected void syncMiddlewareToRouter()

Sync the current state of the middleware to the router.

Return Value

void

at line 679
array getMiddlewarePriority()

Get the priority-sorted list of middleware.

Return Value

array

at line 689
protected array bootstrappers()

Get the bootstrap classes for the application.

Return Value

array

at line 699
protected void reportException(Throwable $e, array $context = [])

Report the exception to the exception handler.

Parameters

Throwable $e
array $context

Return Value

void

at line 707
protected Response renderException(Request $request, Throwable $e)

Render the exception to a response.

Parameters

Request $request
Throwable $e

Return Value

Response

at line 717
array getGlobalMiddleware()

Get the application's global middleware.

Return Value

array

at line 732
Kernel setGlobalMiddleware(array $middleware)

Set the application's global middleware.

Boot-only. Middleware persists in the singleton Kernel's global stack for the worker lifetime and runs on every subsequent request across all coroutines.

Parameters

array $middleware

Return Value

Kernel

at line 746
array getMiddlewareGroups()

Get the application's route middleware groups.

Return Value

array

at line 760
Kernel setMiddlewareGroups(array $groups)

Set the application's middleware groups.

Boot-only. Middleware groups persist in the singleton Kernel for the worker lifetime and affect every subsequent request matching those groups.

Parameters

array $groups

Return Value

Kernel

at line 776
array getMiddlewareAliases()

Get the application's route middleware aliases.

Return Value

array

at line 790
Kernel setMiddlewareAliases(array $aliases)

Set the application's route middleware aliases.

Boot-only. Middleware aliases persist in the singleton Kernel for the worker lifetime and affect every subsequent request that uses them.

Parameters

array $aliases

Return Value

Kernel

at line 809
Kernel setMiddlewarePriority(array $priority)

Set the application's middleware priority.

Boot-only. The middleware priority list persists in the singleton Kernel for the worker lifetime and affects middleware ordering for every subsequent request.

Parameters

array $priority

Return Value

Kernel

at line 821
Application getApplication()

Get the application instance.

Return Value

Application

at line 835
Kernel setApplication(Application $app)

Set the application instance.

Tests only. Swaps the singleton Kernel's application reference; per-request use races across coroutines and breaks every concurrent request the worker is handling.

Parameters

Application $app

Return Value

Kernel