You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CakePHP CRUD中使用UUID实现编辑/删除操作的问题

环境

  • CakePHP 4.4.14
  • friendsofcake/crud: 6.2.0

出于安全考虑,同时避免暴露表中的行数,我希望在edit/delete操作中使用uuid字段。

通常这类操作的路由是/edit/123,这正是我想要避免的,因此我希望将其改为/edit/446a1a76-4eac-4b2d-8825-7e3a7e91f4a0。

但此时会出现无法转换为数字的错误,这是合理的,因为uuid并非数字。

我查阅了相关事件,CRUD文档提到beforeFind事件触发时查询的WHERE条件已设置:

query 来自Repository的Query对象,其中已添加$PrimaryKey => $IdFromRequest的条件。

我需要将查询中的字段改为uuid,并且必须在beforeFind之前操作,因为参数类型已被设为integer,而uuid不是整数。

我尝试了以下代码:

$this->Crud->on('beforeFind', function(\Cake\Event\EventInterface $event) {
    $event->getSubject()->query->where(['uuid' => "uuid-as-string"]);
});

但这并不生效,因为该操作只是添加了条件,原有的id条件仍保留在查询中。


说明:每个表都遵循CakePHP规则设置了主键id,但同时也有用于公共访问的uuid字段,项目内部使用id进行操作。

内容的提问来源于stack exchange,提问作者Peter VARGA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:22:28