/** * {@inheritDoc} */ public function resolve(ServerRequestInterface $request, DomainPayloadInterface $domainPayload) { $type = $this->negotiationManager->getBestMatch($request, array_keys($this->responderResolver)); if (null !== $type) { $resolvers = []; if (isset($this->responderResolver[$type])) { $resolvers = $this->responderResolver[$type]; if (!is_array($resolvers)) { $resolvers = [$resolvers]; } } foreach ($resolvers as $resolver) { if (!$resolver instanceof ResponderResolver) { continue; } $responder = $resolver->resolve($request, $domainPayload); if ($responder instanceof Responder) { // step out of the loop when a responder could be found // by the resolvers. First resolvers wins! return $responder; } } } // in case no matching responder could be found for the requested type we need // to notify the client with an "406 Not acceptable" response. return new HttpStatusCodeResponder(406); }
/** * @test */ public function respondersNotImplementingTheRequiredInterfaceWillBeIgnored() { $this->manager->expects($this->once())->method('getBestMatch')->will($this->returnValue('text/vcard')); $responder = $this->resolver->resolve($this->request, $this->domainPayload); $this->assertInstanceOf(HttpStatusCodeResponder::class, $responder); }