Nelmioapidocbundle: $ref not found

Created on 16 Aug 2017  路  20Comments  路  Source: nelmio/NelmioApiDocBundle

Action looks like this:

/**
 * @Operation(
 *     summary="Gets an agent for a given id.",
 *     @SWG\Parameter(
 *         name="id",
 *         in="query",
 *         description="Which agent to return.",
 *         required=false,
 *         type="string"
 *     ),
 *     @SWG\Response(
 *         response="200",
 *         description="Returned when successful.",
*          @Model(type=AppBundle\Entity\Agent::class, groups={"agent.show"})
 *     ),
 *     @SWG\Response(
 *         response="404",
 *         description="Returned when the agent is not found."
 *     )
 * )
 *
 * @Rest\Get("/agent")
 * @Rest\QueryParam(name="id", requirements="\d+", description="Which agent to return.")
 */

Results in:

"User Notice: $ref "#/definitions/Agent" not found for @SWG\Schema() in \Nelmio\ApiDocBundle\SwaggerPhp\ModelRegister->__invoke() in /vagrant/api/vendor/nelmio/api-doc-bundle/SwaggerPhp/ModelRegister.php on line 74"

Any help appreciated

Most helpful comment

All 20 comments

For some reason i am encountering the same issue.
I tried to install a fresh copy of symfony + jms serializer + nelmio api only to test and i also hit the same issue

Same here

Could you provide us the stack trace please? I think because we don't register the models in zircote-php, it raises a notice when it validates its output.

namespace AppBundle\Model;
use JMS\Serializer\Annotation as Serializer;

class Testing
{

    /**
     * @var
     * @Serializer\Type("string")
     */
    public $test;

}

On default controller

    /**
     * @SWG\Response(
     *     response="200",
     *     description="User successfully retrieved",
     *     @Model(type="AppBundle\Model\Testing")
     * )
Symfony\Component\Debug\Exception\ContextErrorException:
User Notice: $ref "#/definitions/Testing" not found for @SWG\Schema() in \Nelmio\ApiDocBundle\SwaggerPhp\ModelRegister->__invoke() in D:\Work\tnelm\vendor\nelmio\api-doc-bundle\SwaggerPhp\ModelRegister.php on line 71

  at vendor\zircote\swagger-php\src\Logger.php:38
  at Swagger\Logger->Swagger\{closure}('$ref "#/definitions/Testing" not found for @SWG\\Schema() in \\Nelmio\\ApiDocBundle\\SwaggerPhp\\ModelRegister->__invoke() in D:\\Work\\tnelm\\vendor\\nelmio\\api-doc-bundle\\SwaggerPhp\\ModelRegister.php on line 71', 1024)
  at call_user_func(object(Closure), '$ref "#/definitions/Testing" not found for @SWG\\Schema() in \\Nelmio\\ApiDocBundle\\SwaggerPhp\\ModelRegister->__invoke() in D:\\Work\\tnelm\\vendor\\nelmio\\api-doc-bundle\\SwaggerPhp\\ModelRegister.php on line 71', 1024)
     (vendor\zircote\swagger-php\src\Logger.php:68)
  at Swagger\Logger::notice('$ref "#/definitions/Testing" not found for @SWG\\Schema() in \\Nelmio\\ApiDocBundle\\SwaggerPhp\\ModelRegister->__invoke() in D:\\Work\\tnelm\\vendor\\nelmio\\api-doc-bundle\\SwaggerPhp\\ModelRegister.php on line 71')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:368)
  at Swagger\Annotations\AbstractAnnotation->validate(array(object(Swagger), object(Path), object(Get), object(Response)), array(object(Swagger), object(Path), object(Get), object(Response)), 'responses/0/schema')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:443)
  at Swagger\Annotations\AbstractAnnotation::_validate(object(Response), array(object(Swagger), object(Path), object(Get), object(Response)), array(object(Swagger), object(Path), object(Get), object(Response)), 'responses/0')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:413)
  at Swagger\Annotations\AbstractAnnotation->validate(array(object(Swagger), object(Path), object(Get), object(Response)), array(object(Swagger), object(Path), object(Get)), 'responses/0')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:443)
  at Swagger\Annotations\AbstractAnnotation::_validate(array(object(Response)), array(object(Swagger), object(Path), object(Get)), array(object(Swagger), object(Path), object(Get)), 'responses')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:449)
  at Swagger\Annotations\AbstractAnnotation::_validate(object(Get), array(object(Swagger), object(Path), object(Get)), array(object(Swagger), object(Path), object(Get)), '')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:413)
  at Swagger\Annotations\AbstractAnnotation->validate(array(object(Swagger), object(Path), object(Get)), array(object(Swagger), object(Path)))
     (vendor\zircote\swagger-php\src\Annotations\Operation.php:158)
  at Swagger\Annotations\Operation->validate(array(object(Swagger), object(Path)), array(object(Swagger), object(Path)), '#/paths/0/get')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:443)
  at Swagger\Annotations\AbstractAnnotation::_validate(object(Path), array(object(Swagger), object(Path)), array(object(Swagger), object(Path)), '#/paths/0')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:413)
  at Swagger\Annotations\AbstractAnnotation->validate(array(object(Swagger), object(Path)), array(object(Swagger)), '#/paths/0')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:443)
  at Swagger\Annotations\AbstractAnnotation::_validate(array(object(Path)), array(object(Swagger)), array(object(Swagger)), '#/paths')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:449)
  at Swagger\Annotations\AbstractAnnotation::_validate(object(Swagger), array(object(Swagger)), array(object(Swagger)), '#')
     (vendor\zircote\swagger-php\src\Annotations\AbstractAnnotation.php:413)
  at Swagger\Annotations\AbstractAnnotation->validate(array(object(Swagger)), array(), '#')
     (vendor\zircote\swagger-php\src\Annotations\Swagger.php:150)
  at Swagger\Annotations\Swagger->validate()
     (vendor\zircote\swagger-php\src\Analysis.php:331)
  at Swagger\Analysis->validate()
     (vendor\nelmio\api-doc-bundle\Describer\SwaggerPhpDescriber.php:44)
  at Nelmio\ApiDocBundle\Describer\SwaggerPhpDescriber->Nelmio\ApiDocBundle\Describer\{closure}()
  at call_user_func(object(Closure))
     (vendor\nelmio\api-doc-bundle\Describer\ExternalDocDescriber.php:40)
  at Nelmio\ApiDocBundle\Describer\ExternalDocDescriber->getExternalDoc()
     (vendor\nelmio\api-doc-bundle\Describer\ExternalDocDescriber.php:33)
  at Nelmio\ApiDocBundle\Describer\ExternalDocDescriber->describe(object(Swagger))
     (vendor\nelmio\api-doc-bundle\ApiDocGenerator.php:59)
  at Nelmio\ApiDocBundle\ApiDocGenerator->generate()
     (vendor\nelmio\api-doc-bundle\Controller\SwaggerUiController.php:31)
  at Nelmio\ApiDocBundle\Controller\SwaggerUiController->__invoke(object(Request))
  at call_user_func_array(object(SwaggerUiController), array(object(Request)))
     (vendor\symfony\symfony\src\Symfony\Component\HttpKernel\HttpKernel.php:153)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor\symfony\symfony\src\Symfony\Component\HttpKernel\HttpKernel.php:68)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Kernel.php:171)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (web\app_dev.php:30)
  at require('D:\\Work\\tnelm\\web\\app_dev.php')
     (vendor\symfony\symfony\src\Symfony\Bundle\WebServerBundle\Resources\router.php:42)

Same here

Any ideas how to fix it?

Same here, waiting for some solution for this - any updates ?

Well on my side i even tried to force model registry to describe the model when loading the SwaggerPhpDescriber, it didn't seem to work..

From what i know is the model describer's doesn't seem to be running at all. The moment SwaggerPHPDescriber runs the error is thrown.

Meanwhile i guess staying on 2.x is the best way to go.

Same here.

PR welcome, for me we just have to register a fake definition in swagger-php when detecting @Model.

Comment out line 44 in Nelmio\ApiDocBundle\Describer\SwaggerPhpDescriber
$analysis->validate();
This validation should not run in the Describer... at the point where this command runs it does not have the hole inforamtion!

@betzholz if we remove this we'll remove all errors notice from swagger-php (annotation misuses for instance). I'd rather fix the notice.

Erm. No idea why the build failed O o.

But anyway by changing

$annotation->merge([new $annotationClass([
  'ref' => $this->modelRegistry->register(new Model($this->createType($model->type), $model->groups)),
])])

to

$annotation->merge([new Definition(["title" => "Fake"]), new $annotationClass([
  ref' => $this->modelRegistry->register(new Model($this->createType($model->type), $model->groups)),
])])

Also add

use Swagger\Annotations\Definition;

Seems to work for me, well at least on my testing project.

Problem is caused by conflicts with newer version of zircote/swagger-php. To resolve the problem quickly, you should downgrade the version of zircote/swagger-php to version 2.0.9 by adding to your composer.json the following line:

"zircote/swagger-php": "2.0.9"

It seems that also "zircote/swagger-php": "2.0.10" works.

So just for a though should you "lock" your dependency versions ? OR at least run tests when some of those has been updated.

Tried #1073 and results are the same.

User Notice: $ref "#/definitions/User" not found for @SWG\Items() in \Nelmio\ApiDocBundle\SwaggerPhp\ModelRegister->__invoke() in /home/wunder/PhpstormProjects/symfony-flex-backend/vendor/nelmio/api-doc-bundle/SwaggerPhp/ModelRegister.php on line 74

@tarlepp are you sure you correctly tested #1073? Because line 74 is a line break...

@GuilhemN Damn, I though that fix was already merged to master...

Was this page helpful?
0 / 5 - 0 ratings

Related issues

timotheemoulin picture timotheemoulin  路  5Comments

abidichrak picture abidichrak  路  5Comments

DavidGarciaCat picture DavidGarciaCat  路  4Comments

alxfv picture alxfv  路  5Comments

BraisGabin picture BraisGabin  路  7Comments