通常您不会更改标准的,而是添加另一个或使用 beforeSave 等钩子。
保存功能是模型的一部分。通常你修改它们: 行为。请参阅:http ://book.cakephp.org/2.0/en/models/behaviors.html它们允许您修改模型、保存等,而无需将所有代码直接编码到您的模型中。
根据您的编辑:
唯一约束
如我所见,您想要一个唯一的用户名。有多种解决方案。首先确保设置约束。甚至您的 random() 技巧也可能会生成重复,因为 random 也可以创建相同的。所以 username.random(4) 可以生成多次:username1234。你不能确定。
约束应设置在例如您的模型级别。从对 CakePHP 的验证开始这个独特的检查。
您何时知道用户名已被使用
您将知道验证失败的时间。所以首先验证记录。所以在保存调用 model::validate() 之前检查你的唯一约束是否正常。如果是,请保存。
http://book.cakephp.org/2.0/en/models/data-validation.html
如果不是,您可以添加随机字符串并再次检查。调用 model::validate 看看现在是否正常。例如,这部分可以在 beforeSave() 方法中的行为中实现。
现在你有一个独特的保存你的记录。确保检查它是否成功,因为可能同时添加了具有该用户名的另一条记录。在这种情况下,重新运行该过程。
很多工作
这很困难,因为多个客户端甚至可以在您知道之前在数据库中同时添加数据。最简单的是捕获错误,因此只需使用您的用户名调用 save 即可。如果由于您的唯一约束而失败,请添加 random() 字符串并一次又一次地尝试。应该可以保存。在这里使用您的随机字符串进行技巧,因为如果它很短并且用户名被大量使用,您可能会遇到问题。如果您的随机字符串是 3 个数字,您可以使用相同的用户名 1000 次,从 000 到 999。
其他选项
您有时会看到建议,界面会根据您的用户名输入建议一些免费名称。你仍然需要检查。
另一种选择
只是告诉用户它正在使用中。也许添加一个 ajax 检查,这样您就可以通过验证字段来立即显示结果。