API平台中的多种操作方法

时间:2019-04-17 14:31:35

标签: api-platform.com

我正在编写一个自定义操作,我需要使它可用于GET(集合)和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(摇晃)

@Method({"GET", "POST"})

如果更改顺序,则会看到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'

2 个答案:

答案 0 :(得分:0)

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

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 ...
}

答案 1 :(得分:0)

这里的问题是两个操作都使用相同的名称。但是,路由名称必须唯一。如果没有,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 ...
}