2013-03-04 156 views
3

提交數據只重新加載頁面,沒有錯誤或消息由CakePHP給出。 代碼遵循與博客教程相同/相似的結構。CakePHP數據不保存/添加到數據庫

視圖代碼

 <?php 
     echo $this->Form->create('Sm'); 
     echo $this->Form->input('recievers', array('rows' => '1')); 
     echo $this->Form->input('subject'); 
     echo $this->Form->input('message'); 
     echo $this->Form->end('SEND'); 
     ?> 

控制器代碼

public function send() { 
    if ($this->request->is('sm')) { 
     $this->Sm->create(); 
     if ($this->Sm->save($this->request->data)) { 
      $this->Session->setFlash('Sms has been added to the database'); 
      $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash('Unable to send sms.'); 
     } 
    } 
} 

型號代碼

class Sm extends AppModel { 
public $validate = array(
    'subject' => array(
     'rule' => 'notEmpty' 
    ), 
    'message' => array(
     'rule' => 'notEmpty' 
    ), 
    'recievers' => array(
     'rule' => 'notEmpty' 
    ) 
); } 

導出SQL

CREATE TABLE IF NOT EXISTS `sms` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `subject` varchar(150) DEFAULT NULL, 
    `message` text, 
    `sender` varchar(50) DEFAULT NULL, 
    `recievers` text, 
    `sent` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; 
+0

向上投票的問題,因爲我看到沒有直接的理由,這個問題獲得了負分。所有必需的代碼都包含在內,整齊地格式化,OP正在嘗試根據手冊中的示例啓動CakePHP。 – thaJeztah 2013-03-04 14:18:53

+0

謝謝你,先生:)至於這個問題,我最後的答案是使用烘焙工具來生成代碼。下面的建議答案都沒有做到這一點。可能會花一些時間比較我的原始代碼和生成的代碼以找到正確的答案。 – ChrisRSA 2013-03-05 16:15:07

回答

5

你已經指定了一個不正確的請求'method';

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

應該是:

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

我懷疑你被介紹CakePHP的例子,它使用一個 '後' 型號混淆。然而,該行檢查用於訪問該頁面的類型的請求,例如, postgetput

通過檢查權請求的方法,CakePHP就會只能插入/更新數據的形式發送/提交,否則表單只是顯示而不更新數據庫

+2

啊是的!我對帖子模型和帖子方法感到困惑,整天都在爲這個簡單的錯誤拉我的頭髮。謝謝! – ChrisRSA 2013-03-05 16:44:06

+0

也許後期是不是一個很好的名字,在例子中使用:) – Arthur 2014-09-03 12:22:48

+0

@arthur nope不是真的。我見過其他人也被這個困惑:) – thaJeztah 2014-09-03 14:37:49

0

您忘記在模型中定義name屬性。

var $name = 'Sm'; 
+0

您不必指定'name'屬性,它會自動設置爲className; http://api.cakephp.org/2.3/source-class-Model.html#691 – thaJeztah 2013-03-04 14:09:56

+0

自2.x以來,它也被大多數人推薦(並且被許多人推薦)而不是完全設置它。 – mark 2013-03-04 14:17:58

0

就在幾分鐘前,我面臨同樣類型的問題。我的問題更奇怪。在我的控制器我用這樣的:

if($this->MyModel->save($this->request->data)) { 
    //positive. proceed..... 
} 
else { 
    //negative. show error 
    pr($this->MyModel->validationErrors); 
} 

正如你可以看到我已經處理的案件負但我依然什麼也看不見。即使在我的模型中,我之前使用過SaveSave和SaveSave來檢查。在我的beforeSave模型中,我可以看到一個完全格式化的數組,可以保存,但我afterSave沒有觸發,這意味着數據沒有保存。因此我應該看到來自我的控制器的錯誤。仍然無解。

現在這是我如何解決問題。我檢查了數據將被保存到的表格。該表有很多具有NOT NULL屬性的列。我正在保存的數據有一些NULL值的字段。所以理論上,我應該在控制器中看到validationErrors作爲原因,但不幸的是它沒有顯示。設置這些字段可以解決我的問題。所以我給你的建議是檢查哪些字段可能具有NULL值並將它們設置爲空,並確保NOT NULL字段具有某些值。

希望這會有所幫助。乾杯!!!