2012-06-25 16 views
0

我正在編寫一個功能來編輯表中的所有項目。編輯所有功能不起作用 - CakePHP

這裏是我的控制器我的編輯操作:

public function editAll() 
    { 
     $this->set('isEditAllValid', false); 
     $this->set('editAllValidationErrors', false); 

     if ($this->request->is('post')) 
     { 
      $this->LocalClock->table = 'local_clocks'; 
      $this->LocalClock->getDataSource()->tableFields['local_clocks'] = array("id", "name", "auto_offset", "utc_offset_sec", "in_month", "in_week", "in_day", "in_hour", "out_month", "out_week", "out_day", "out_hour", "offset_sec"); 
      $this->set('localClocksEntries', $this->LocalClock->find('all')); 
      if ($this->LocalClock->save($this->request->data)) 
      { 
       foreach($localClocksEntries as $LocalClock) 
       { 
        $this->set('LocalClock', $this->request->data); 
        $this->LocalClock->save($LocalClock); 
        $this->set('isEditAllValid', true); 
        $this->set('editAllValidationErrors', false); 
       } 
      } 
      else 
      { 
       $this->set('isEditAllValid', false); 
       $this->set('editAllValidationErrors', true); 
      } 
     } 
    } 

我在做什麼的代碼,設置一些布爾變量爲假(驗證的東西),然後如果動作後搶地方計時錶並將其插入到變量中進行存儲。然後遍歷該變量並保存發佈到表中每個項目的數據。

我不知道爲什麼,但我試圖編輯所有時會出現2錯誤。

通知(8):未定義變量:localClocksEntries [APP /控制器/ LocalClocksController.php,線158]
警告(2):提供的foreach無效的參數()[APP /控制器/ LocalClocksController.php,行158]

基本上我只想循環表中的每一行,並將內容更改爲用戶在窗體中輸入的內容。

回答

3
$this->set('localClocksEntries', $this->LocalClock->find('all')); 

這爲視圖設置變量。它不會在當前範圍內創建該變量。所以變量$localClocksEntries不存在於foreach ($localClocksEntries ...中。如果你想使用變量在當前範圍把它傳遞給視圖,這樣做:

$localClocksEntries = $this->LocalClock->find('all'); 
$this->set('localClocksEntries', $localClocksEntries); 
+0

我做了改變,我不明白這些錯誤。但是,當試圖保存它時,最終會向表中添加一個新項目,而不是編輯現有項目。有任何想法嗎? – RXC

+1

需要爲循環中的每個迭代設置主鍵(id)。如果沒有指定ID,cake會創建一個新行,而不是編輯一個。 – Hoff

+0

@Hoff - 我得到它的工作,感謝您的幫助。 我剛剛添加這兩行來解決這個問題,它工作。 '$ this-> LocalClock-> id = $ LocalClock ['LocalClock'] ['id']; $ this-> LocalClock-> save($ this-> request-> data);' – RXC