- CakePHP 4.4.14
- Friendsofcake/crud:6.2.0
出于简单的安全原因,同时也不想泄露表中的行数,我想对edit/delete
操作使用uuid
字段。
通常它的工作方式是这样的/edit/123
。这正是我**不想拥有的。所以我想把它改成/edit/446a1a76-4eac-4b2d-8825-7e3a7e91f4a0
。
是的,现在我得到错误消息,它不能被转换为数字;这是正确的,因为uuid
不是一个数字。
我检查了事件,但根据CRUD文档,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]);
});
不起作用,因为条件是added,并且id
仍保留在查询中。
- 明确 *:根据CakePHP规则,每个表都有主键
id
,但每个表也有用于公共访问的字段uuid
。项目内部使用id
。
1条答案
按热度按时间gcxthw6b1#
在
AppController
中:然后,在CRUD
actions
的开始|edit
|view
处理程序id
字段应重新建立为主键。例如,当依赖表的行以edit
模式示出时,这是需要的,例如,也用寄存器选项卡实现。如果
id
在开始时没有被设置,那么依赖行就找不到,因为CakePHP * 认为 *uuid
是主键,而实际上不是。