php - 在 APi 平台中关闭端点的复数
问题描述
在 Symfony 5 项目中,我们使用 APi 平台生成 REST API。
其中一个实体类称为FarmMetadata
.
<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
/**
* @ApiResource()
* @ORM\Table(... some settings ...)
* @ORM\Entity
*/
class FarmMetadata
{
// properties and methods
}
当我运行php bin/console debug:router
它时,它会显示此资源的以下路线:
api_farm_metadatas_get_collection GET ANY ANY /api/farm_metadatas.{_format}
api_farm_metadatas_post_collection POST ANY ANY /api/farm_metadatas.{_format}
api_farm_metadatas_get_item GET ANY ANY /api/farm_metadatas/{id}.{_format}
api_farm_metadatas_delete_item DELETE ANY ANY /api/farm_metadatas/{id}.{_format}
api_farm_metadatas_put_item PUT ANY ANY /api/farm_metadatas/{id}.{_format}
api_farm_metadatas_patch_item PATCH ANY ANY /api/farm_metadatas/{id}.{_format}
然而,“元数据”这个词已经是复数了。没有元数据之类的东西。如何关闭此端点的复数?
我尝试使用shortName
:
* @ApiResource(
* shortName="FarmMetadata" // also "farm_metadata"
* )
但它不会改变输出。
如果我使用:
* @ApiResource(
* shortName="Metadata"
* )
然后更改路线名称和路径:
api_metadata_get_collection GET ANY ANY /api/metadata.{_format}
api_metadata_post_collection POST ANY ANY /api/metadata.{_format}
api_metadata_get_item GET ANY ANY /api/metadata/{id}.{_format}
api_metadata_delete_item DELETE ANY ANY /api/metadata/{id}.{_format}
api_metadata_put_item PUT ANY ANY /api/metadata/{id}.{_format}
api_metadata_patch_item PATCH ANY ANY /api/metadata/{id}.{_format}
但这不是我想要的。
我知道我可以为每个操作声明一条路径,但这会损害 DRY 原则。
我怎样才能实现所需的行为?
解决方案
我不认为这是通过配置实现的:这些路由是在私有方法中构建的ApiPlatform\Core\Bridge\Symfony\Routing\ApiLoader::addRoute
(至少在我使用的 v2.6 中),并且这使用了对复数器的静态调用 - 所以:装饰 ApiLoader 不是很容易实现(因为 addRoute 方法是私有的),并且无法交换生成路由的方式(由于使用静态方法调用)。
看起来您需要在他们的错误跟踪器中打开功能请求票...
推荐阅读
- gitlab - 在 Gitlab 中按顺序运行作业
- go - 无法解析 .proto 文件中的导入
- python - 将 Django 应用程序部署到 Heroku 时的密钥问题
- log4j2 - 我可以将 Log Analytics 与 log4j2 集成吗?
- reactjs - NextJS Apollo“queryData.ssrInitiated is not a function”路由错误
- python - 如何将两个python表合并为一个只显示公共表的表
- node.js - 如何在 Node Mongo DB mongoose Express App 中同时创建文档和子文档
- c++ - 为什么对 std::map::operator[] 的调用不能编译为没有默认构造函数的值类型?
- azure-logic-apps - Azure Logic App:检查属性是否存在于 json 对象中
- python - selenium.common.exceptions.SessionNotCreatedException:消息:会话未创建:此版本的 ChromeDriver 仅支持 Chrome 版本 85