cakePHP - 创建新用户帐户,有几个问题

时间:2011-09-02 01:19:32

标签: validation cakephp model oncreate onupdate

我有两张表,userstokens 每个用户都有一个activated字段,每个令牌都有{id, token, user_id, created}个字段。

应用应该如何运作: 在创建时,应用程序将 -

  1. 确保activated字段为空(以避免对提交的数据进行操作)。
  2. 将在tokens表格中创建一个令牌。
  3. 在更新时,应用程序将 -

    1. 不创建新令牌。
    2. 不允许对activated字段进行任何更新。
    3. 检查是否已提交新电子邮件,如果已提交:将创建新令牌并将activated字段设置为false。
    4. 我知道如何通过控制器激活帐户以及如何为此设置路由器 我需要的主要是模型配置 例如: 我认为令牌创建应该在afterSave方法中完成,所以 - 如何确定更新或创建操作是否调用该方法?

      感谢您的帮助

2 个答案:

答案 0 :(得分:1)

你的问题不清楚。如果你有一个字段的默认值,那么为什么不在数据库中设置它而不是在aftersave中做某事?如果您需要执行仅在某些情况下应该执行的操作,请在模型中编写自定义方法,以便在创建或更新时执行所需的任务。

修改

因此,如果您的记录有id,那么您知道它存在于数据库中。因此,要做的简单事情是(在任何方法中)检查模型是否具有id字段并且它不是空的。如果它是空的,那么你知道你正在创建一个记录,你可以做x任务。如果不是,那就做任务。

if(isset($modelData['ModelName']['id']) && !empty($modelData['ModelName']['id'])){
    //This is an update
} else {
    //This is a new record
}

答案 1 :(得分:1)

yossi你也可以指定应该从表单中保存的字段 - 字段白名单可以保存在$ this-> save()调用中。这样你可以阻止黑客在请求中传递ID,你应该自己在控制器中设置它然后用$ this-> Token-> id =你拥有的任何东西,我个人会使用saveField('激活)与此相结合(只保存一个字段!)。脂肪模型是最好的,如果你可以,但先让它工作然后重构它,如果你遇到困难。比浪费大量时间写第一次完美更好。