Php 关闭APi平台中端点的多元化
在symfony5项目中,我们使用APi平台生成restapi 其中一个实体类称为Php 关闭APi平台中端点的多元化,php,rest,symfony,api-platform.com,Php,Rest,Symfony,Api Platform.com,在symfony5项目中,我们使用APi平台生成restapi 其中一个实体类称为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
<?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
}
然而,“元数据”这个词已经是复数了。没有元数据这样的东西。如何关闭此端点的多元化
我尝试使用短名称
:
* @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原则
如何实现所需的行为?我认为这不可能通过配置实现:这些路由是在私有方法中构建的
apipplatform\Core\Bridge\Symfony\Routing\ApiLoader::addRoute
(至少在我使用的v2.6中),这使用了对复数器的静态调用——因此:修饰ApiLoader不容易(因为addRoute方法是私有的),交换生成路由的方法也不可能(因为使用了静态方法调用)
看起来您需要在他们的bug跟踪器中打开功能请求单…您可以在每个操作中使用“路径”选项。
碳纤维
比如说
* shortName="Metadata",
* itemOperations={
* "get"={
* "path"="/metadata/{id}"
这回答了你的问题吗?谢谢这并不能回答我的问题。我彻底检查了文档,并且已经读过了。我不知道如何为单个实体使用自定义路径解析器。它显示了如何在应用程序配置中注册自定义路径解析器。感谢您的回答。这样一个简单而常见的需求没有得到实现,这真的很烦人。
* shortName="Metadata",
* itemOperations={
* "get"={
* "path"="/metadata/{id}"