Fix some bugs and confings

This commit is contained in:
Filip Benčo 2019-12-13 22:20:13 +01:00
parent f9eacee3fd
commit 2de03859c0
4 changed files with 34 additions and 24 deletions

View File

@ -37,11 +37,11 @@ class ObjectModelDescriber implements ModelDescriberInterface, ModelRegistryAwar
public function __construct(
PropertyInfoExtractorInterface $propertyInfo,
Reader $reader,
array $propertyDescribers
$propertyDescribers
) {
$this->propertyInfo = $propertyInfo;
$this->propertyDescribers = $propertyDescribers;
$this->doctrineReader = $reader;
$this->propertyDescribers = $propertyDescribers;
}
public function describe(Model $model, Schema $schema)
@ -93,21 +93,28 @@ class ObjectModelDescriber implements ModelDescriberInterface, ModelRegistryAwar
}
$type = $types[0];
foreach ($this->propertyDescribers as $propertyDescriber) {
if ($propertyDescriber instanceof ModelRegistryAwareInterface) {
$propertyDescriber->setModelRegistry($this->modelRegistry);
}
if ($propertyDescriber->supports($type)) {
$propertyDescriber->describe($type, $property, $model->getGroups());
break;
}
}
throw new \Exception(sprintf('Type "%s" is not supported in %s::$%s. You may use the `@SWG\Property(type="")` annotation to specify it manually.', $type->getBuiltinType(), $class, $propertyName));
$this->describeProperty($type, $model, $property);
}
}
private function describeProperty(Type $type, Model $model, Schema $property)
{
foreach ($this->propertyDescribers as $propertyDescriber) {
if ($propertyDescriber instanceof ModelRegistryAwareInterface) {
$propertyDescriber->setModelRegistry($this->modelRegistry);
}
if ($propertyDescriber->supports($type)) {
$propertyDescriber->describe($type, $property, $model->getGroups());
return;
}
}
throw new \Exception(sprintf('Type "%s" is not supported in %s::$%s. You may use the `@SWG\Property(type="")` annotation to specify it manually.', $type->getBuiltinType(), $class, $propertyName));
}
public function supports(Model $model): bool
{
return Type::BUILTIN_TYPE_OBJECT === $model->getType()->getBuiltinType() && class_exists($model->getType()->getClassName());

View File

@ -23,7 +23,7 @@ class ArrayPropertyDescriber implements PropertyDescriberInterface, ModelRegistr
/** @var PropertyDescriberInterface[] */
private $propertyDescribers;
public function __construct(array $propertyDescribers)
public function __construct($propertyDescribers = [])
{
$this->propertyDescribers = $propertyDescribers;
}

View File

@ -12,11 +12,12 @@
namespace Nelmio\ApiDocBundle\PropertyDescriber;
use EXSyst\Component\Swagger\Schema;
use Nelmio\ApiDocBundle\Describer\ModelRegistryAwareInterface;
use Nelmio\ApiDocBundle\Describer\ModelRegistryAwareTrait;
use Nelmio\ApiDocBundle\Model\Model;
use Symfony\Component\PropertyInfo\Type;
class ObjectPropertyDescriber implements PropertyDescriberInterface
class ObjectPropertyDescriber implements PropertyDescriberInterface, ModelRegistryAwareInterface
{
use ModelRegistryAwareTrait;

View File

@ -41,7 +41,7 @@
<service id="nelmio_api_doc.model_describers.object" class="Nelmio\ApiDocBundle\ModelDescriber\ObjectModelDescriber" public="false">
<argument type="service" id="property_info" />
<argument type="service" id="annotation_reader" />
<argument type="tagged_iterator" id="nelmio_api_doc.property_describer" />
<argument type="tagged_iterator" tag="nelmio_api_doc.property_describer" />
<tag name="nelmio_api_doc.model_describer" />
</service>
@ -51,31 +51,33 @@
</service>
<!-- Property Describers -->
<service id="nelmio_api_doc.property_describers.array" class="Nelmio\ApiDocBundle\ModelDescriber\ArrayPropertyDescriber" public="false">
<service id="nelmio_api_doc.property_describers.array" class="Nelmio\ApiDocBundle\PropertyDescriber\ArrayPropertyDescriber" public="false">
<argument type="tagged_iterator" tag="nelmio_api_doc.property_describer" />
<tag name="nelmio_api_doc.property_describer" />
</service>
<service id="nelmio_api_doc.property_describers.boolean" class="Nelmio\ApiDocBundle\ModelDescriber\BooleanPropertyDescriber" public="false">
<service id="nelmio_api_doc.property_describers.boolean" class="Nelmio\ApiDocBundle\PropertyDescriber\BooleanPropertyDescriber" public="false">
<tag name="nelmio_api_doc.property_describer" />
</service>
<service id="nelmio_api_doc.property_describers.float" class="Nelmio\ApiDocBundle\ModelDescriber\FloatPropertyDescriber" public="false">
<service id="nelmio_api_doc.property_describers.float" class="Nelmio\ApiDocBundle\PropertyDescriber\FloatPropertyDescriber" public="false">
<tag name="nelmio_api_doc.property_describer" />
</service>
<service id="nelmio_api_doc.property_describers.integer" class="Nelmio\ApiDocBundle\ModelDescriber\IntegerPropertyDescriber" public="false">
<service id="nelmio_api_doc.property_describers.integer" class="Nelmio\ApiDocBundle\PropertyDescriber\IntegerPropertyDescriber" public="false">
<tag name="nelmio_api_doc.property_describer" />
</service>
<service id="nelmio_api_doc.property_describers.string" class="Nelmio\ApiDocBundle\ModelDescriber\StringPropertyDescriber" public="false">
<service id="nelmio_api_doc.property_describers.string" class="Nelmio\ApiDocBundle\PropertyDescriber\StringPropertyDescriber" public="false">
<tag name="nelmio_api_doc.property_describer" />
</service>
<service id="nelmio_api_doc.property_describers.date_time" class="Nelmio\ApiDocBundle\ModelDescriber\DateTimePropertyDescriber" public="false">
<service id="nelmio_api_doc.property_describers.date_time" class="Nelmio\ApiDocBundle\PropertyDescriber\DateTimePropertyDescriber" public="false">
<tag name="nelmio_api_doc.property_describer" />
</service>
<service id="nelmio_api_doc.property_describers.object" class="Nelmio\ApiDocBundle\ModelDescriber\ObjectPropertyDescriber" public="false">
<service id="nelmio_api_doc.property_describers.object" class="Nelmio\ApiDocBundle\PropertyDescriber\ObjectPropertyDescriber" public="false">
<tag name="nelmio_api_doc.property_describer" priority="-1000" />
</service>