我正在创建一个联系表单,以便将电子邮件发送到指定的地址。我正在尝试使用CakePHP模型验证,因为我不需要联系模型的表,我在联系模型中将useTable设置为false。 然而,我在执行发送的控制器功能中出错。错误是
缺少数据库表 错误:找不到模型联系人的数据库表联系人。
指向第一次调用$ this->联系人:
$ this->联系人 - >验证($ this->数据);
我认为使用CakePHP框架一切都很好。为什么我错了?
答案 0 :(得分:7)
修改:请参阅this answer(和comment)了解CakePHP 2.x(模型文件应称为Contact.php
)
CakePHP 1.x - 验证您的模型文件是否为contact.php
(小写)。如果不是,CakePHP将找不到您的模型,而是在运行时创建一个名为Contact
的“autoModel”,它使用contacts
表。
答案 1 :(得分:4)
这是搜索的最佳结果,但我认为信息已过时。
在CakePHP 2.0+中,您需要在模型中设置$useTable = false;
,模型名称使用的是正确的(因此它应该是Contact
而不是contact
,并且控制器必须具有$uses = 'Contact';
或$uses = array('Contact');
或cake生成默认模型属性,并尝试加载不存在的表。因此,必须设置这两件事才能使其发挥作用。
答案 2 :(得分:2)
如果内存服务,你实际上并没有设置你的模型:
$this->Contact->set( $this->data );
$this->Contact->validates();
在您的代码中,当您尝试验证模型时,实际上并未填充模型。
答案 3 :(得分: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')
);
}
答案 4 :(得分: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');
?>
答案 5 :(得分:1)
如果它对任何人有帮助,我发现如果我有
var $uses = 'ModelName';
在我的控制器中,它将覆盖useTable。如果您不需要,请将其取下。