Api platform.com API平台中的多种操作方法

Api platform.com API平台中的多种操作方法,api-platform.com,Api Platform.com,我正在编写一个自定义操作,我需要将它同时用于GET(collection)和POST方法 我的注释如下所示 /** * @Route( * name="api_entity_custom", * path="/entity/custom", * defaults={ * "_api_resource_class"=Entity::class, * "_api_collection_operation_name"="EntityCustom"

我正在编写一个自定义操作,我需要将它同时用于
GET
(collection)和
POST
方法

我的注释如下所示

/**
 * @Route(
 *     name="api_entity_custom",
 *     path="/entity/custom",
 *     defaults={
 *      "_api_resource_class"=Entity::class,
 *      "_api_collection_operation_name"="EntityCustom"
 *     }
 * )
 * @Method("GET")
 */
这对GET有效,但当我添加POST时,我只看到GET in文档(招摇过市)

如果我更改顺序,则会看到
POST
,但不会看到
GET

@Method({"POST", "GET"})
有可能这样做吗?怎么做

编辑: 我用的是这样的结构

//Path/To/Entity/Action/EntityCustomAction.php  
class EntityCustomAction
    {
        /**
         * @Route(
         *     name="api_entity_custom",
         *     path="/entity/custom",
         *     defaults={
         *      "_api_resource_class"=Entity::class,
         *      "_api_collection_operation_name"="EntityCustom"
         *     }
         * )
         * @Method("GET")
         */

        public function __invoke($data)
{
...
这是在路由中启用的

entity:
   resource: '@EntityBundle/Action/'
   type:     'annotation'

您可以通过以下方式执行此操作:

Action 1:

/**
 * @Route("/data/save", name="data_save")
 * @Method({"GET"})
 * @Template()
 */
public function dataSaveViewAction()
{
    // code here...
}

Action 2:

/**
 * @Route("/data/save", name="data_save")
 * @Method({"POST"})
 */
public function dataSaveAction(Request $request)
{
    // code here ...
}


您可以通过以下方式执行此操作:

Action 1:

/**
 * @Route("/data/save", name="data_save")
 * @Method({"GET"})
 * @Template()
 */
public function dataSaveViewAction()
{
    // code here...
}

Action 2:

/**
 * @Route("/data/save", name="data_save")
 * @Method({"POST"})
 */
public function dataSaveAction(Request $request)
{
    // code here ...
}


这里的问题是,两个操作使用相同的名称。但是,路由的名称必须是唯一的。否则,API平台将不会显示它。你应该这样做:

    Action 1:

/**
 * @Route("/data/save", name="data_save_get") // Choose a unique name
 * @Method({"GET"})
 * @Template()
 */
public function dataSaveViewAction()
{
    // code here...
}

Action 2:

/**
 * @Route("/data/save", name="data_save_post") // same here
 * @Method({"POST"})
 */
public function dataSaveAction(Request $request)
{
    // code here ...
}

这里的问题是,两个操作使用相同的名称。但是,路由的名称必须是唯一的。否则,API平台将不会显示它。你应该这样做:

    Action 1:

/**
 * @Route("/data/save", name="data_save_get") // Choose a unique name
 * @Method({"GET"})
 * @Template()
 */
public function dataSaveViewAction()
{
    // code here...
}

Action 2:

/**
 * @Route("/data/save", name="data_save_post") // same here
 * @Method({"POST"})
 */
public function dataSaveAction(Request $request)
{
    // code here ...
}