2009-09-26 61 views
6

我正在創建一個聯繫表單發送電子郵件到指定的地址。我試圖利用CakePHP模型驗證,因爲我不需要聯繫人模型的表格,我已經在聯繫人模型中將useTable設置爲false。 但是,我在發送的控制器函數中收到錯誤。該錯誤是CakePHP詢問模型表儘管useTable = false

Missing Database Table Error: Database table contacts for model Contact was not found.

指向,使第一個電話被$ this-行>聯繫人:我認爲這是所有好去與CakePHP的框架

$this->Contact->validates($this->data);

。爲什麼我錯了?

回答

7

編輯:見this answer(和comment)爲CakePHP的2.x的(模型文件應該被稱爲Contact.php


CakePHP的1.x的 - 驗證你的模型文件被稱爲contact.php(小寫)。如果不是,CakePHP將找不到您的模型,並且將在運行時創建一個名爲Contact的「autoModel」,該表使用contacts表。

+1

哇。我自己翻了幾遍,直到現在才意識到我將它命名爲contact.ctp,從而創造了習慣。我覺得自己是個騙子。 – Adam 2009-09-29 00:51:54

+0

呵呵,我們都在那裏。一次讓我很好的一次是'actsAs' vs'actAs',浪費了數小時。 – deizel 2009-09-29 07:56:10

2

如果沒記錯,您實際上並不設置你的模型:

$this->Contact->set($this->data); 
$this->Contact->validates(); 

在你的代碼,該模型實際上不是當您嘗試驗證它填充。

2

如果您使用的是模型,而你還需要設置一個模式如

class Contact extends AppModel { 
    var $name = 'Contact'; 
    var $useTable = false; 
    var $_schema = array(
     'name' => array('type' => 'string', 'length' => 255), 
     'email' => array('type' => 'string', 'length' => 255), 
     'message' => array('type' => 'text') 
    ); 
} 
1

如果它有助於任何一個表,我發現,如果我有

var $uses = 'ModelName'; 
在我的控制器

,它會覆蓋useTable。如果您不需要它,請將其移除。

2

兩件事情對我造成了不同 - 將我的模型的文件名更改爲Contact.php(而不是ContactModel.php)並在我的ContactController.php中註釋掉var $uses = 'Contact';

此外,許多用於聯繫表單的教程都是針對早期版本的CakePHP。一定要使用正確的表單輸入結構。這是我在Cake 2.1中的視圖:

<?php 
    echo $this->Form->create('Contact'); 
    echo $this->Form->inputs(); 
    echo $this->Form->end('Send'); 

?> 
+0

這裏也是一個2.x:http://www.dereuromark.de/2011/12/15/tools-plugin-part-2-contact-form/ - 使用模式 – mark 2012-04-03 16:27:08

+0

非常感謝提示將SomethingModel.php重命名爲Something.php。我有完全相同的問題,並正要發瘋尋找我的問題的來源:-) – andzep 2013-03-28 22:26:40

+0

我有這個相同的問題,但我只是在閱讀此解決方案之前意外修復它。 – MjrKusanagi 2014-07-10 00:16:46

4

這是搜索的最高結果,但信息已過時我認爲。

在CakePHP 2.0+需要設置$useTable = false;模型,該模型名稱使用propercase(所以它應該是Contact而不是contact的建議)和控制器必須$uses = 'Contact';$uses = array('Contact');或蛋糕生成默認的模型性能和嘗試加載一個不存在的表。所以這些東西都必須設置好才能起作用。

+0

就像在@deizel答案中一樣,驗證您的模型文件名爲Contact.php(在CakePHP 2.x中爲大寫)。如果不是,CakePHP將無法使用$ useTable查找模型和任何唯一的表定義。 – zmonteca 2014-03-25 19:44:46