Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve ease of extention #89

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions src/Bridge.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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));
}
}
21 changes: 18 additions & 3 deletions src/ControllerInvoker.php
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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) {
Expand Down