diff --git a/src/Encoder/Encoder.php b/src/Encoder/Encoder.php index d02a0146..354431a2 100644 --- a/src/Encoder/Encoder.php +++ b/src/Encoder/Encoder.php @@ -20,6 +20,7 @@ use \Neomerx\JsonApi\Contracts\Document\ErrorInterface; use \Neomerx\JsonApi\Contracts\Encoder\EncoderInterface; use \Neomerx\JsonApi\Contracts\Schema\ContainerInterface; +use \Neomerx\JsonApi\Contracts\Schema\SchemaFactoryInterface; use \Neomerx\JsonApi\Contracts\Schema\SchemaProviderInterface; use \Neomerx\JsonApi\Contracts\Document\DocumentFactoryInterface; use \Neomerx\JsonApi\Contracts\Encoder\Parser\DataAnalyzerInterface; @@ -192,25 +193,42 @@ protected function encodeToJson(array $document) * @return Encoder */ public static function instance(array $schemas, EncoderOptions $encodeOptions = null) + { + /** @var SchemaFactoryInterface $schemaFactory */ + /** @var DocumentFactoryInterface $documentFactory */ + /** @var ParserFactoryInterface $parserFactory */ + /** @var HandlerFactoryInterface $handlerFactory */ + /** @var ParametersFactoryInterface $parameterFactory */ + list($schemaFactory, $documentFactory, $parserFactory, $handlerFactory, $parameterFactory) = + static::getFactories(); + + $container = $schemaFactory->createContainer($schemas); + + return new self( + $documentFactory, + $parserFactory, + $handlerFactory, + $parameterFactory, + $container, + $encodeOptions + ); + } + + /** + * @return array [$schemaFactory, $documentFactory, $parserFactory, $handlerFactory, $parameterFactory] + */ + protected static function getFactories() { /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */ $schemaFactory = new \Neomerx\JsonApi\Schema\SchemaFactory(); - $container = $schemaFactory->createContainer($schemas); /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */ $documentFactory = new \Neomerx\JsonApi\Document\DocumentFactory(); /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */ - $encoderFactory = new \Neomerx\JsonApi\Encoder\Factory\EncoderFactory(); + $parserFactory = $handlerFactory = new \Neomerx\JsonApi\Encoder\Factory\EncoderFactory(); /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */ $parameterFactory = new \Neomerx\JsonApi\Parameters\ParametersFactory(); - return new self( - $documentFactory, - $encoderFactory, - $encoderFactory, - $parameterFactory, - $container, - $encodeOptions - ); + return [$schemaFactory, $documentFactory, $parserFactory, $handlerFactory, $parameterFactory]; } /** diff --git a/src/Schema/Container.php b/src/Schema/Container.php index b17861e1..5c95e6b6 100644 --- a/src/Schema/Container.php +++ b/src/Schema/Container.php @@ -88,7 +88,7 @@ public function registerArray(array $schemas) */ public function getSchema($resource) { - $resourceType = get_class($resource); + $resourceType = $this->getResourceType($resource); if (isset($this->createdProviders[$resourceType])) { return $this->createdProviders[$resourceType]; @@ -105,4 +105,14 @@ public function getSchema($resource) return $schema; } + + /** + * @param object $resource + * + * @return string + */ + protected function getResourceType($resource) + { + return get_class($resource); + } }