0

众所周知,cakephp 具有用于将记录插入数据库的默认保存命令。但我想知道我可以在 cakephp 中创建自己的保存命令还是修改现有的命令。我可以这样做吗?

你一定在问我为什么要问我为什么这么说?让我给你一个活生生的例子----假设我有一个包含用户输入的用户名的文本框。我不认为这是唯一的,因此多个用户将插入相同的用户名(可能..) .

Ex-我的名字是 prakash Gupta,我正在使用用户名“prakash”。还有其他用户的名字也可以是 prakash gupta,他们将提供相同的用户名。现在为了解决这个问题,我正在使用随机函数并在用户名后面附加一些数字,这样每个人都会有所不同。现在“保存”命令将采用我在文本框中输入的用户名并插入数据库,但我想将修改后的用户名插入我通过随机函数生成的数据库中。这可能吗???如果是,请告诉我....

4

1 回答 1

0

通常您不会更改标准的,而是添加另一个或使用 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 检查,这样您就可以通过验证字段来立即显示结果。

于 2012-10-18T08:24:33.940 回答