如何在NelmioApiDocBundle中标记参数支持int或null类型?
解决NelmioApiDocBundle标记参数支持int或null类型的问题
嘿,我来帮你搞定这个需求!要让parentPOSId在API文档里显示为支持int或null类型,你可以按照下面的步骤操作:
方法一:直接在接口方法上添加Swagger注解
因为你用的是@Model引用接口,我们可以直接在接口的方法上添加@SWG\Property注解,明确指定类型和可空性:
修改你的SetPOSParentInterface代码:
namespace App\Domain\Port\POSParent; use Swagger\Annotations as SWG; interface SetPOSParentInterface { /** * @SWG\Property(type="integer") */ public function getPOSId(): int; /** * @SWG\Property(type="integer", nullable=true) */ public function getParentPOSId(): ?int; }
这个注解会告诉NelmioApiDocBundle,parentPOSId的类型是整数,并且允许为null。
方法二:改用具体DTO类(推荐)
有时候接口的注解可能不会被完全识别,这时候可以创建一个实现该接口的DTO类,在属性上添加注解,这样文档生成会更可靠:
- 创建DTO类:
namespace App\Domain\DTO\POSParent; use App\Domain\Port\POSParent\SetPOSParentInterface; use Swagger\Annotations as SWG; class SetPOSParentDTO implements SetPOSParentInterface { /** * @SWG\Property(type="integer") */ private int $POSId; /** * @SWG\Property(type="integer", nullable=true) */ private ?int $parentPOSId; // 构造函数(按需添加) public function __construct(int $POSId, ?int $parentPOSId) { $this->POSId = $POSId; $this->parentPOSId = $parentPOSId; } // 实现接口的getter方法 public function getPOSId(): int { return $this->POSId; } public function getParentPOSId(): ?int { return $this->parentPOSId; } }
- 修改控制器里的
@Model注解,引用这个DTO类:
@Model(type=App\Domain\DTO\POSParent\SetPOSParentDTO::class)
最后一步:清除缓存并验证文档
完成上述修改后,清除Symfony缓存,确保注解被正确加载:
php bin/console cache:clear
现在重新查看你的API文档,parentPOSId参数就会显示为支持integer或null类型了。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

