-
Notifications
You must be signed in to change notification settings - Fork 4
Closed
Description
FastRoute doesn't add the options to the request attributes. Below is a workaround middleware.
<?php
namespace App\Middleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Zend\Expressive\Router\Route;
final class RouterOptionValuesToRequestAttributes implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$attributes = $request->getAttributes();
if (array_key_exists('Zend\Expressive\Router\RouteResult', $attributes)) {
/** @var \Zend\Expressive\Router\RouteResult $result */
$result = $attributes['Zend\Expressive\Router\RouteResult'];
$route = $result->getMatchedRoute();
if ($route instanceof Route) {
$options = $route->getOptions();
if (array_key_exists('values', $options)) {
$values = $options['values'];
$request = array_reduce(array_keys($values), function(ServerRequestInterface $request, $key) use ($values) {
return $request->withAttribute($key, $values[$key]);
}, $request);
}
}
}
return $handler->handle($request);
}
}
codeliner
Metadata
Metadata
Assignees
Labels
No labels