Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关闭APi平台中端点的多元化_Php_Rest_Symfony_Api Platform.com - Fatal编程技术网

Php 关闭APi平台中端点的多元化

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

在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
{
    // 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}"