перепутал $ this в cakePHP - PullRequest
0 голосов
/ 12 июня 2010

Я получил несколько строк кода в модели в 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 ]

3 голосов
/ 12 июня 2010

В этой строке:

$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 устанавливается как контрольная сумма MD5 pswd в массиве User из $raw.

2 голосов
/ 04 марта 2011
if($this->data['Register']['password'] == $this->data['Register']['confirm_password'])
{
   return true;
}
else
{
   return false;
}

Используйте это в функции beforeSave вашей модели ()

...