在cakePHP中混淆$ this

时间:2010-06-12 17:42:24

标签: cakephp cakephp-1.2

我在cakePHP 1.26中的模型中获得了几行代码:

function beforeSave() { 
        $this->data['User']['pswd'] = md5($raw['User']['pswd']);              
         return true;
                         } // this beforeSave() works

上面的代码已经过测试,可以在我的数据库中使用 然而,我不确定我能否理解它,
所以,我以其他方式重新编写了代码,然后就失败了。

 function beforeSave() { 
            $raw=$this->data;       
            $raw['User']['pswd'] = md5($raw['User']['pswd']);                    
             return true;
                             } // this beforeSave() failed to work

为什么第二种方法不起作用?

2 个答案:

答案 0 :(得分:3)

在这一行:

$raw=$this->data

您只是将$this->data按值分配给$raw。因此,当您更改$raw的数组数据时,$this->data不会受到更改的影响。

此外,您完全改变了代码的含义。您最终要做的是从您的模型中用$raw替换 $this->data的数据。我之前没有使用过CakePHP,但我认为$raw已经包含了通过某种输入收到的所有原始数据,而模型中的$this->data包含了旧版本的模型数据(例如,用户将要更改的旧密码)。您更改的代码将删除$raw中的所有新数据,我认为这不是您打算从第一个代码示例中做出的判断。

为了解释这一行:

$this->data['User']['pswd'] = md5($raw['User']['pswd']);

这非常简单:pswd User数组$this->data项被设置为pswd数组中User数组的MD5校验和$raw

答案 1 :(得分:2)

if($this->data['Register']['password'] == $this->data['Register']['confirm_password'])
{
   return true;
}
else
{
   return false;
}

在模型的beforeSave函数()

中使用它