OutputDocumentsTrait uses trait:short, trait:short
Provides a standardized way to output documents from controllers.
This trait offers methods to format documents responses, generate URLs for documents, and handle optional response wrapping with PSR-7 response objects. It relies on BaseUrlTrait for URL generation and StatusTrait for response formatting.
Usage example:
$documents = $this->outputDocuments($request, $response, $data, ['page' => 1]);
Table of Contents
Properties
- $baseUrl : string
- The application's base URL.
Methods
- fail() : ResponseInterface|null
- Generates a structured error response with an HTTP status code and optional detailed messages.
- getCurrentPath() : string
- Returns the current application path relative to the base URL.
- getFullPath() : string
- Returns the full application URL including the base URL and optional parameters.
- getPath() : string
- Generates a path based on the base URL and a provided relative path.
- initializeBaseUrl() : static
- Initializes the internal `baseUrl` property.
- response() : ResponseInterface
- Return a response in the format accepted by the client : JSON by default or CBOR.
- status() : ResponseInterface|null
- Outputs a generic HTTP status message in a JSON response.
- success() : mixed
- Outputs a success message with optional JSON metadata.
- successWithNewBody() : mixed
- Same as {@see self::success()} but guarantees a fresh response body stream before writing the envelope.
- withFreshBody() : ResponseInterface|null
- Returns the same response with a fresh, empty body stream.
- documentsResponse() : object|null
- Generates a standardized response for a list of documents.
- getDocumentUrl() : string
- Returns the URL associated with the documents response.
- outputDocuments() : array<string|int, mixed>|object|null
- Outputs a list of documents, optionally wrapping them in a response object.
Properties
$baseUrl
The application's base URL.
public
string
$baseUrl
= \oihana\enums\Char::EMPTY
Used as a prefix for all generated URLs.
Methods
fail()
Generates a structured error response with an HTTP status code and optional detailed messages.
public
fail(ServerRequestInterface|null $request, ResponseInterface|null $response[, int|string|null $code = 400 ][, string|null $details = null ][, array<string|int, mixed> $options = [] ][, string|null $accept = null ]) : ResponseInterface|null
Automatically logs the error if logging is enabled.
Parameters
- $request : ServerRequestInterface|null
-
Optional PSR-7 Request object.
- $response : ResponseInterface|null
-
The PSR-7 Response object.
- $code : int|string|null = 400
-
The HTTP status code (default: 400).
- $details : string|null = null
-
Optional detailed error message to override default description.
- $options : array<string|int, mixed> = []
-
Optional array of additional data to include (e.g., errors).
- $accept : string|null = null
-
The header accepted by the client : 'application/cbor' or by default 'application/json'
Tags
Return values
ResponseInterface|null —Returns a PSR-7 Response object with JSON content or null if $response is not provided.
getCurrentPath()
Returns the current application path relative to the base URL.
public
getCurrentPath([ServerRequestInterface|null $request = null ][, array<string|int, mixed> $params = [] ][, bool $useNow = false ]) : string
Uses the Request object if provided, otherwise falls back to $_SERVER['REQUEST_URI'].
Allows adding GET parameters via $params.
Parameters
- $request : ServerRequestInterface|null = null
-
Optional HTTP request
- $params : array<string|int, mixed> = []
-
Optional associative array of GET parameters
- $useNow : bool = false
-
If true, adds a
_parameter with the current timestamp to prevent caching
Return values
string —Full path including the base URL and query parameters
getFullPath()
Returns the full application URL including the base URL and optional parameters.
public
getFullPath([array<string|int, mixed>|null $params = null ][, bool $useNow = false ]) : string
Parameters
- $params : array<string|int, mixed>|null = null
-
Optional associative array of GET parameters
- $useNow : bool = false
-
If true, adds a
_parameter with the current timestamp
Return values
string —Full URL
getPath()
Generates a path based on the base URL and a provided relative path.
public
getPath([string $path = Char::EMPTY ][, array<string|int, mixed>|null $params = null ][, bool $useNow = false ]) : string
Parameters
- $path : string = Char::EMPTY
-
Relative path to append to the base URL
- $params : array<string|int, mixed>|null = null
-
Optional associative array of GET parameters
- $useNow : bool = false
-
If true, adds a
_parameter with the current timestamp
Return values
string —Full path
initializeBaseUrl()
Initializes the internal `baseUrl` property.
public
initializeBaseUrl([array<string|int, mixed> $init = [] ][, ContainerInterface|null $container = null ]) : static
The value can come from:
- the
$initarray (keyControllerParam::BASE_URL), - the DI container if provided and contains the key
ControllerParam::BASE_URL, - otherwise it remains an empty string.
Parameters
- $init : array<string|int, mixed> = []
-
Optional initialization array
- $container : ContainerInterface|null = null
-
Optional DI container to fetch the base URL
Tags
Return values
static —Returns the current instance for method chaining
response()
Return a response in the format accepted by the client : JSON by default or CBOR.
public
response(ResponseInterface $response[, mixed $data = null ][, int $status = 200 ][, string|null $accept = null ]) : ResponseInterface
Checks the Accept header in the request to determine the preferred format.
Parameters
- $response : ResponseInterface
-
PSR-7 Response object to write to.
- $data : mixed = null
-
Data to send in the response.
- $status : int = 200
-
HTTP status code (default: 200).
- $accept : string|null = null
-
The header accepted by the client : 'application/cbor' or by default 'application/json'
Tags
Return values
ResponseInterfacestatus()
Outputs a generic HTTP status message in a JSON response.
public
status(ServerRequestInterface|null $request, ResponseInterface|null $response[, mixed $message = Char::EMPTY ][, int|string|null $code = 200 ][, array<string|int, mixed>|null $options = null ][, string|null $accept = null ]) : ResponseInterface|null
Parameters
- $request : ServerRequestInterface|null
-
Optional PSR-7 Request object.
- $response : ResponseInterface|null
-
PSR-7 Response object to send output.
- $message : mixed = Char::EMPTY
-
The message content.
- $code : int|string|null = 200
-
The HTTP status code (default: 200).
- $options : array<string|int, mixed>|null = null
-
Optional array of additional output properties.
- $accept : string|null = null
-
The header accepted by the client : 'application/cbor' or by default 'application/json'
Tags
Return values
ResponseInterface|null —Returns a PSR-7 Response object with JSON content or null if $response is not provided.
success()
Outputs a success message with optional JSON metadata.
public
success(ServerRequestInterface|null $request, ResponseInterface|null $response[, mixed $data = null ][, array<string|int, mixed>|null $init = null ][, string|null $accept = null ]) : mixed
If $response is null, returns the $data directly. Supports optional initialization properties like count, limit, offset, owner, URL, status, total, position, options.
Parameters
- $request : ServerRequestInterface|null
-
Optional PSR-7 Request object.
- $response : ResponseInterface|null
-
Optional PSR-7 Response object.
- $data : mixed = null
-
The main payload or data to return.
- $init : array<string|int, mixed>|null = null
-
Optional associative array with keys:
- count (int): Number of elements
- limit (int): Pagination limit
- offset (int): Pagination offset
- params (array): Parameters for getCurrentPath()
- status (int): HTTP status code
- total (int): Total elements
- url (string): URL to include in response
- owner (array|object): Owner reference
- options (array): Additional properties
- position (int): Optional position in list
- $accept : string|null = null
-
The header accepted by the client : 'application/cbor' or by default 'application/json'
Tags
Return values
mixed —Returns a PSR-7 Response object with JSON if $response is provided, otherwise returns $data directly.
successWithNewBody()
Same as {@see self::success()} but guarantees a fresh response body stream before writing the envelope.
public
successWithNewBody(ServerRequestInterface|null $request, ResponseInterface|null $response[, mixed $data = null ][, array<string|int, mixed>|null $init = null ][, string|null $accept = null ]) : mixed
Use this only when an upstream actor (typically a sub-controller called from the current controller method) may have already written into the shared PSR-7 body stream. Calling the plain success() in that case would concatenate two JSON envelopes — invalid JSON for any strict parser (NextJS RSC, modern fetch, etc.).
Implementation: swaps the response body for an empty stream via self::withFreshBody(), then delegates to success(). Whatever was previously written is discarded; the resulting body contains exactly one envelope.
Parameters
- $request : ServerRequestInterface|null
-
Optional PSR-7 Request object.
- $response : ResponseInterface|null
-
Optional PSR-7 Response object.
- $data : mixed = null
-
The main payload or data to return.
- $init : array<string|int, mixed>|null = null
-
Same keys as success().
- $accept : string|null = null
-
The header accepted by the client.
Tags
Return values
mixed —Same return contract as success().
withFreshBody()
Returns the same response with a fresh, empty body stream.
public
withFreshBody(ResponseInterface|null $response) : ResponseInterface|null
Use to discard whatever an upstream actor (sub-controller, middleware) may have already written, then chain into any other response helper.
Parameters
- $response : ResponseInterface|null
-
Optional PSR-7 Response object.
Tags
Return values
ResponseInterface|null —The same response with a fresh empty body,
or null if $response was null.
documentsResponse()
Generates a standardized response for a list of documents.
protected
documentsResponse([ServerRequestInterface|null $request = null ][, ResponseInterface|null $response = null ][, array<string|int, mixed>|null $documents = null ][, array<string|int, mixed> $params = [] ][, array<string|int, mixed>|null $options = null ]) : object|null
Wraps the given documents in a success response, including count, options, and a document URL.
Parameters
- $request : ServerRequestInterface|null = null
-
Optional PSR-7 request object.
- $response : ResponseInterface|null = null
-
Optional PSR-7 response object.
- $documents : array<string|int, mixed>|null = null
-
Optional array of documents to include in the response.
- $params : array<string|int, mixed> = []
-
Optional parameters used for URL generation.
- $options : array<string|int, mixed>|null = null
-
Optional additional options to include in the response.
Return values
object|null —Returns a success-wrapped object if $response is provided; otherwise null.
getDocumentUrl()
Returns the URL associated with the documents response.
protected
getDocumentUrl([ServerRequestInterface|null $request = null ][, array<string|int, mixed> $params = [] ]) : string
By default, this method uses BaseUrlTrait::getCurrentPath() but can be overridden in the controller to provide a custom URL generation logic.
Parameters
- $request : ServerRequestInterface|null = null
-
Optional PSR-7 request object.
- $params : array<string|int, mixed> = []
-
Optional parameters to append to the URL.
Return values
string —The generated document URL.
outputDocuments()
Outputs a list of documents, optionally wrapping them in a response object.
protected
outputDocuments([ServerRequestInterface|null $request = null ][, ResponseInterface|null $response = null ][, array<string|int, mixed>|null $documents = null ][, array<string|int, mixed> $params = [] ][, array<string|int, mixed>|null $options = null ]) : array<string|int, mixed>|object|null
If a PSR-7 Response object is provided, the documents are wrapped using
documentsResponse(). Otherwise, the raw array of documents is returned.
Parameters
- $request : ServerRequestInterface|null = null
-
Optional PSR-7 request object.
- $response : ResponseInterface|null = null
-
Optional PSR-7 response object.
- $documents : array<string|int, mixed>|null = null
-
Optional array of documents to output.
- $params : array<string|int, mixed> = []
-
Optional parameters for URL generation.
- $options : array<string|int, mixed>|null = null
-
Optional additional response options.
Return values
array<string|int, mixed>|object|null —Returns a wrapped response object if $response is provided, otherwise the raw documents array or null.