在cakephp中创建我自己的save命令

时间:2012-10-18 08:15:54

标签: mysql cakephp

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

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

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

1 个答案:

答案 0 :(得分:0)

通常,您不会更改标准版本,而是添加另一个或使用beforeSave等挂钩。

保存功能是模型的一部分。通常您可以使用以下方法修改它们:行为。请参阅:http://book.cakephp.org/2.0/en/models/behaviors.html他们允许您修改模型,保存等,而无需直接将所有代码编码到模型中。

根据您的修改:

唯一约束

我认为您需要一个唯一的用户名。有多种解决方案。首先确保设置约束。即使你的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检查,这样你就可以通过验证字段立即显示结果。