2012-04-15 50 views
0

TL; DR:我在使用jQuery設置POST時遇到了一些麻煩,並且無法設置我的操作(又名帖子處理程序)。可能有人給我怎樣設置的動作/視圖的例子,我將如何從jQuery的發佈如何在CakePHP中創建jQuery帖子來編輯用戶名/密碼?


所以,我做了一些周圍挖掘,但我仍然無法得到它的工作,並沒有發現我不確定的。所以,我認爲我得到了郵件部分,但我不確定如何設置我的發佈請求處理程序。更具體地說,我不知道如何設置控制器的操作和視圖,以便我可以通過消息(成功/錯誤/驗證程序錯誤)得到正確的響應。對於用戶名,我使用的是電子郵件,從我在文檔中讀到的內容,只要你設置你的id然後它會更新記錄。但是,我遇到了奇怪的問題,因爲它也更新我的密碼,即使它不是作爲jQuery帖子的一部分發送的。另一件事是,我注意到,即使我能夠成功地更新電子郵件,我目前的頁面也沒有更新電子郵件。我假設我必須在檢查成功後重新設置該值。任何人都可以如此善良地向我展示一個例子嗎?

這是我有:

操作:

public function edit() { 
    $this->autoRender = false; // I am not sure if I need this 
    Configure::write('debug', 0); // I think this disables all the extra debug messages I get with jQuery 
    $this->disableCache(); // No idea why I need this 

    if($this->request->is('ajax')) { 

     $id = $this->Auth->user('id'); 
     // Going to be adding other cases for name/password/etc... 
     switch($this->params->data['post']) { 
      case 'email': 
       $result = $this->updateEmail($this, $id, $this->params->data); 
       break; 

     } 

    } 

} 

private function updateEmail($object, $id=null, $request=null) { 
      // Do I need to re-log them back in after I change their email to create a new session? 
    $object->AccountDetail->User->id = $id; 
    if($object->AccountDetail->User->save($request)) { 
     return $this->Session->setFlash(__('Your email has been updated!')); 
    } else { 
     return $this->Session->setFlash(__($object->AccountDetail->User->validationErrors)); 
    } 
} 

jQuery的帖子:

$('#email :button').click(function() { 
     $.post('/account/edit', {post: 'email', email: $('#email').val() }); 
    }); 

回答

1

試試這個。這將只更新字段,而不是整行;

saveField(<fieldname>, <data>, <validation>); // structure of saveField() method 

$object->AccountDetail->User->saveField('email', $request, false); 

if($object->AccountDetail->User->saveField('email', $request, false)) { 
    return $this->Session->setFlash(__('Your email has been updated!')); 
} else { 
    return $this->Session->setFlash(__($object->AccountDetail->User->validationErrors)); 
} 

您可以更新您updateEmail()功能updateField()像以下:

private function updateField($object, $field = null, $id=null, $request=null) { 
      // Do I need to re-log them back in after I change their email to create a new session? 
    $object->AccountDetail->User->id = $id; 
    if($object->AccountDetail->User->saveField($field, $request, false)) { 
     return $this->Session->setFlash(__("Your $field has been updated!")); 
    } else { 
     return $this->Session->setFlash(__($object->AccountDetail->User->validationErrors)); 
    } 
} 

而且使用它像:

$result = $this->updateField($this, 'email', $id, $this->params->data); 
相關問題