在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
相关产品推荐
相关产品推荐

