2017-10-05 3 views
1

J'utilise les versions suivantes:en utilisant des définitions externes Swagger/Zircote/Nelmio-api-doc

zircote/swagger-php in version 2.0.10 
nelmio/api-doc-bundle in version v3.0.0-BETA4 

Mon contrôleur avec une action

/** 
    * @Operation(
    *  tags={"DeliverySlip"}, 
    *  summary="Send information after deliveryItems are processed and deliverySlip was scanned", 
    *  @SWG\Response(
    *   response="200", 
    *   description="Returned when successful" 
    * ), 
    *  @SWG\Response(
    *   response="400", 
    *   description="Returned on a missing request parameter" 
    * ), 
    *  @SWG\Response(
    *   response="500", 
    *   description="Returned on any other error" 
    * ), 
    *  @SWG\Parameter(
    *  name="slipIdentifier", 
    *  description="identifier of delivery slip", 
    *  type="string", 
    *  format="string", 
    *  in="path" 
    * ), 
    *  @SWG\Parameter(
    *  name="JSON update body", 
    *  in="body", 
    *  description="json login request object", 
    *  required=true, 
    *  @SWG\Schema(ref="#/definitions/product") 
    * ) 
    *) 
    * 
    * @Put("/deliveryslip/update/{slipIdentifier}", requirements={"slipIdentifier" = "\w+"}) 
    * 
    * @param string $slipIdentifier 
    * @param Request $request 
    * @return JsonResponse 
    */ 
    public function updateDeliverySlipAction($slipIdentifier, Request $request) 

Ce modèle est le/Définition Je veux utiliser dans mon contrôleur d'action:

<?php 

namespace Sendis\Presentation\RestBundle\Model; 

use Swagger\Annotations as SWG; 

/** 
* @SWG\Definition(
*  definition="product", 
*  type="object", 
*  required={"name"} 
*) 
*/ 
class Product 
{ 
    /** 
    * @SWG\Property(example="doggie") 
    * @var string 
    */ 
    public $name; 
} 

Mais quand je vais sur ma page de documentation à/api/doc, je vois cette erreur:

Errors 
Resolver error at paths./api/deliveryslip/update/{slipIdentifier}.put.parameters.1.schema.$ref 
Could not resolve reference: #/definitions/product 

La prochaine chose que je reconnaissais: Mon product.php ne semble pas être lu par swagger du tout. Je peux écrire tout ce que je veux ici. Pas d'erreurs, même si je fais une faute d'orthographe. Ceci m'amène à la conclusion, que mon product.php n'a pas été trouvé par swagger du tout.

Je suis utile pour chaque indice.

Cordialement, Max

Répondre

0

J'ai trouvé la solution à ce problème. J'avais besoin de charger la définition externe avec son espace de nom complet comme ceci:

/** 
    * @SWG\Put(
    *  path="/deliveryslip/update/{slipIdentifier}", 
    *  tags={"DeliverySlip"}, 
    *  summary="Send information after deliveryItems are processed and deliverySlip was scanned", 
    *  @SWG\Definition(
    *  definition="product", 
    *  type="object", 
    *  required={"name"} 
    * ), 
    *  @SWG\Response(
    *   response="200", 
    *   description="Returned when successful" 
    * ), 
    *  @SWG\Response(
    *   response="400", 
    *   description="Returned on a missing request parameter" 
    * ), 
    *  @SWG\Response(
    *   response="500", 
    *   description="Returned on any other error" 
    * ), 
    *  @SWG\Parameter(
    *  name="slipIdentifier", 
    *  description="identifier of delivery slip", 
    *  type="string", 
    *  format="string", 
    *  in="path" 
    * ), 
    *  @SWG\Parameter(
    *  name="JSON update body", 
    *  in="body", 
    *  description="json login request object", 
    *  required=true, 
    *  @SWG\Schema(
    *   type="array", 
    *   @Model(type=Sendis\Presentation\RestBundle\Model\Product::class) 
    * ) 
    * ) 
    *) 
    * 
    * @param string $slipIdentifier 
    * @param Request $request 
    * @return JsonResponse 
    */ 
    public function updateDeliverySlipAction($slipIdentifier, Request $request)