diff --git a/src/Bridge.php b/src/Bridge.php index 127cdc9..6ae28df 100644 --- a/src/Bridge.php +++ b/src/Bridge.php @@ -39,7 +39,10 @@ public static function create(?ContainerInterface $container = null): App return $app; } - private static function createControllerInvoker(ContainerInterface $container): ControllerInvoker + /** + * Create an invoker with the default resolvers. + */ + protected static function createInvoker(ContainerInterface $container): Invoker { $resolvers = [ // Inject parameters by name first @@ -50,8 +53,14 @@ private static function createControllerInvoker(ContainerInterface $container): new DefaultValueResolver, ]; - $invoker = new Invoker(new ResolverChain($resolvers), $container); + return new Invoker(new ResolverChain($resolvers), $container); + } - return new ControllerInvoker($invoker); + /** + * Create a controller invoker with the default resolvers. + */ + protected static function createControllerInvoker(ContainerInterface $container): ControllerInvoker + { + return new ControllerInvoker(self::createInvoker($container)); } } diff --git a/src/ControllerInvoker.php b/src/ControllerInvoker.php index bc1a632..98e114c 100644 --- a/src/ControllerInvoker.php +++ b/src/ControllerInvoker.php @@ -24,7 +24,6 @@ public function __construct(InvokerInterface $invoker) * @param ServerRequestInterface $request The request object. * @param ResponseInterface $response The response object. * @param array $routeArguments The route's placeholder arguments - * @return ResponseInterface|string The response from the callable. */ public function __invoke( callable $callable, @@ -42,10 +41,26 @@ public function __invoke( // Inject the attributes defined on the request $parameters += $request->getAttributes(); - return $this->invoker->call($callable, $parameters); + return $this->processResponse($this->invoker->call($callable, $parameters)); } - private static function injectRouteArguments(ServerRequestInterface $request, array $routeArguments): ServerRequestInterface + /** + * Allow for child classes to process the response. + * + * @param ResponseInterface|string $response The response from the callable. + * @return ResponseInterface|string The processed response + */ + protected function processResponse($response) + { + return $response; + } + + /** + * Inject route arguments into the request. + * + * @param array $routeArguments + */ + protected static function injectRouteArguments(ServerRequestInterface $request, array $routeArguments): ServerRequestInterface { $requestWithArgs = $request; foreach ($routeArguments as $key => $value) {