Skip to content

Commit

Permalink
Improve ease of extention
Browse files Browse the repository at this point in the history
In our usage we need to extend the ControllerInvoker to have responses
normalised from a generic Payload into a standard Response.

To make this easier it would be helpful if some private methods were
instead protected and the Invoker fetching the default resolver chain
were separated out from the creation of the ControllerInvoker.

Fixes #105
  • Loading branch information
andrewnicols committed Jun 19, 2024
1 parent 02ab027 commit 5d72a56
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 5 deletions.
21 changes: 18 additions & 3 deletions src/Bridge.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,13 @@ public static function create(?ContainerInterface $container = null): App
return $app;
}

private static function createControllerInvoker(ContainerInterface $container): ControllerInvoker
/**
* Create an invoker with the default resolvers.
*
* @param ContainerInterface $container

Check failure on line 45 in src/Bridge.php

View workflow job for this annotation

GitHub Actions / Coding standards

Method \DI\Bridge\Slim\Bridge::createInvoker() has useless @param annotation for parameter $container.
* @return Invoker

Check failure on line 46 in src/Bridge.php

View workflow job for this annotation

GitHub Actions / Coding standards

Method \DI\Bridge\Slim\Bridge::createInvoker() has useless @return annotation.
*/
protected static function createInvoker(ContainerInterface $container): Invoker
{
$resolvers = [
// Inject parameters by name first
Expand All @@ -50,8 +56,17 @@ 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.
*
* @param ContainerInterface $container

Check failure on line 65 in src/Bridge.php

View workflow job for this annotation

GitHub Actions / Coding standards

Method \DI\Bridge\Slim\Bridge::createControllerInvoker() has useless @param annotation for parameter $container.
* @return ControllerInvoker

Check failure on line 66 in src/Bridge.php

View workflow job for this annotation

GitHub Actions / Coding standards

Method \DI\Bridge\Slim\Bridge::createControllerInvoker() has useless @return annotation.
*/
protected static function createControllerInvoker(ContainerInterface $container): ControllerInvoker
{
return new ControllerInvoker(self::createInvoker($container));
}
}
22 changes: 20 additions & 2 deletions src/ControllerInvoker.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,28 @@ 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 The response from the callable.

Check failure on line 51 in src/ControllerInvoker.php

View workflow job for this annotation

GitHub Actions / Coding standards

Missing parameter name
* @return ResponseInterface|string The processed response
*/
protected function processResponse($response)

Check failure on line 54 in src/ControllerInvoker.php

View workflow job for this annotation

GitHub Actions / Coding standards

Method \DI\Bridge\Slim\ControllerInvoker::processResponse() does not have parameter type hint nor @param annotation for its parameter $response.
{
return $response;
}

/**
* Inject route arguments into the request.
*
* @param ServerRequestInterface $request

Check failure on line 62 in src/ControllerInvoker.php

View workflow job for this annotation

GitHub Actions / Coding standards

Method \DI\Bridge\Slim\ControllerInvoker::injectRouteArguments() has useless @param annotation for parameter $request.
* @param array $routeArguments
* @return ServerRequestInterface

Check failure on line 64 in src/ControllerInvoker.php

View workflow job for this annotation

GitHub Actions / Coding standards

Method \DI\Bridge\Slim\ControllerInvoker::injectRouteArguments() has useless @return annotation.
*/
protected static function injectRouteArguments(ServerRequestInterface $request, array $routeArguments): ServerRequestInterface
{
$requestWithArgs = $request;
foreach ($routeArguments as $key => $value) {
Expand Down

0 comments on commit 5d72a56

Please sign in to comment.