2011-11-11 58 views
0

我想loadeditsave記錄與CakePHP 2.0但我的save方法不幫我明白問題出在哪裏時獲得generic error保存數據使用CakePHP將無法正常工作

如果我試用debug($this->User->invalidFields());我得到一個empty array,但我得到false$this->User->save()條件。

這裏是控制器動作,我得到的錯誤:

public function activate ($code = false) { 
    if (!empty ($code)) { 

     // if I printr $user I get the right user 
     $user = $this->User->find('first', array('activation_key' => $code)); 

     if (!empty($user)) { 
      $this->User->set(array (
       'activation_key' => null, 
       'active' => 1 
      )); 

      if ($this->User->save()) { 
       $this->render('activation_successful'); 
      } else { 
       // I get this error 
       $this->set('status', 'Save error message'); 
       $this->set('user_data', $user); 
       $this->render('activation_fail'); 
      } 
      debug($this->User->invalidFields()); 

     } else { 
      $this->set('status', 'Account not found for this key'); 
      $this->render('activation_fail'); 
     } 
    } else { 
     $this->set('status', 'Empty key'); 
     $this->render('activation_fail'); 
    } 
} 

當我嘗試動作test.com/users/activate/hashedkey我得到的activation_fail模板頁面Save error message消息。

如果我printr$user VAR我從蛋糕的find方法得到正確的用戶。

我在哪裏錯了?

+0

它可能無法驗證嗎? – NullUserException

+0

你能建議我一些替代方法來調試無效的fileds而不是'debug($ this-> User-> invalidFields());'? – vitto

回答

5

我覺得問題可能出在你查詢的用戶記錄的方式。當您這樣做時:

$user = $this->User->find('first', array('activation_key' => $code)); 

將變量$user填充爲用戶記錄作爲數組。你檢查以確保它不是空的,然後繼續; 問題是$this->User尚未填充。我想如果你嘗試debug($this->User->id)它將是空的。 read() method按照您的想法工作。

你可以嘗試使用的ID從$user數組首先設置模型ID,像這樣:

if (!empty($user)) { 
    $this->User->id = $user['User']['id']; // ensure the Model has the ID to use 
    $this->User->set(array (
     'activation_key' => null, 
     'active' => 1 
    )); 
    if ($this->User->save()) { 
    ... 

編輯:那麼另一個可能的方法是使用$user陣列,而不是修改當前模型。你說,你得到一個有效的用戶,如果你debug($user),因此,如果這是真的,你可以做這樣的事情:

if (!empty($user)) { 
    $user['User']['activation_key'] = null; 
    $user['User']['active'] = 1; 
    if ($this->User->save($user)) { 
    ... 

此方法相同的方式工作從$this->request->data接收表單數據,並在描述Saving Your Data本書的一部分。

我很好奇,但如果有你的設置的另一部分是越來越的方式。您的應用的其他部分可以正確寫入數據庫嗎?您還應該檢查以確保您沒有驗證錯誤,例如他們的示例:

<?php 
if ($this->Recipe->save($this->request->data)) { 
    // handle the success. 
} 
debug($this->Recipe->validationErrors); 
+0

感謝您提供的信息,正如您所說的'$ this-> user-> id'是空的,我試圖在您編寫時修復它,但問題同樣存在,也使用'$ this-> User->保存($ this-> User-> data)'沒有成功。什麼可以代替'$ this-> User'是空的? – vitto

+0

上面加了幾個想法,vitto – brism

+0

再次謝謝。你的答案的第二部分解決了我的問題,我需要將數據添加到'$ user',然後保存它。我還需要將'$ this-> user-> find('first',array('activation_key'=> $ code))''變成'... find('first',array('conditions'=> array ('用戶。activation_key'=> $ code)));' – vitto

相關問題