首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >api-platform |有没有办法关闭特定操作或路由上的WriteListener?

api-platform |有没有办法关闭特定操作或路由上的WriteListener?
EN

Stack Overflow用户
提问于 2018-07-03 14:30:20
回答 1查看 1.4K关注 0票数 1

因此,由于api-platform.com Unable to generate an IRI for the item of type,我尝试了一种不同的方法,并在我的用户实体上声明了用于登录、注册和重置的自定义操作(因为我仍然需要它们的自定义业务逻辑)。因此,在api-platform中的初始设置相当简单。我将以下代码添加到我的用户实体中

代码语言:javascript
复制
 *      collectionOperations={
 *          "register"={"route_name"="user_register","normalization_context"={"groups"={"registerRead"}},"denormalization_context"={"groups"={"registerWrite"}}},
 *          "reset"={"route_name"="user_reset","normalization_context"={"groups"={"resetRead"}},"denormalization_context"={"groups"={"resetWrite"}}},
 *          "login"={"route_name"="user_login","normalization_context"={"groups"={"loginRead"}},"denormalization_context"={"groups"={"loginWrite"}}},
 *          "token"={"route_name"="user_token","normalization_context"={"groups"={"tokenRead"}},"denormalization_context"={"groups"={"token"}}}
 *      },

然后将适当的操作添加到用户控制器。

代码语言:javascript
复制
/**
 * @Route(
 *     name="user_login",
 *     path="api/user/login",
 *     methods={"POST"},
 *     defaults={
 *         "_api_resource_class"=User::class,
 *         "_api_collection_operation_name"="login",
 *         "_api_receive"=false
 *     }
 * )
 */
public function loginAction(User $data): User {

    ///$this->userService->login($data);

    return $data;
}

/**
 * @Route(
 *     name="user_register",
 *     path="api/user/register",
 *     methods={"POST"},
 *     defaults={
 *         "_api_resource_class"=User::class,
 *         "_api_collection_operation_name"="register",
 *         "_api_receive"=false
 *     }
 * )
 */
public function registerAction(User $data): User {

    ///$this->userService->register($data);

    return $data;
}

/**
 * @Route(
 *     name="user_reset",
 *     path="api/user/reset",
 *     methods={"POST"},
 *     defaults={
 *         "_api_resource_class"=User::class,
 *         "_api_collection_operation_name"="reset",
 *         "_api_receive"=false
 *     }
 * )
 */
public function resetAction(User $data): User {

    //$this->userService->reset($data);

    return $data;
}

/**
 * @Route(
 *     name="user_token",
 *     path="api/user/token",
 *     methods={"POST"},
 *     defaults={
 *         "_api_resource_class"=User::class,
 *         "_api_collection_operation_name"="token",
 *         "_api_receive"=false
 *     }
 * )
 */
public function tokenAction(User $data): User {

    //$this->userService->reset($data);

    return $data;
}

到目前为止,一切都很好,然而……因为我们在这里使用的是post操作,而用户是doctrine实体,所以api-platform捆绑包自动将post添加到数据库中。但我不希望这样,我希望它将实体传递给控制器,然后控制器使用服务来执行业务逻辑。并确定是否以及如何处理该帖子。

现在我看了一下文档,问题似乎是WriteListener总是触发器,还有其他触发器(例如ReadListener、DeserializeListener和ValidateListener)可以通过_api_receive参数禁用。

这就留下了一个问题,有没有办法在特定的操作或路由上禁用WriteListener?

致以亲切的问候,Ruben van der Linde

EN

回答 1

Stack Overflow用户

发布于 2018-07-05 06:34:58

您可以返回HttpFoundation的Response而不是$data的实例。则不会调用在kernel.view上注册的任何侦听器。

但是为写监听器引入一个类似于api_receive的监听器是一个好主意。你介意打开一个拉取请求吗?

编辑:我已经打开了一个拉取请求,以引入这个新标志:https://github.com/api-platform/core/pull/2072

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51147945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档