我的CakePHP 2.0应用程序中有几个不同的联系表单。所有联系表单都是应该发送的电子邮件,但是我需要这个特定的表单也将表单结果保存到数据库中。邮件数据正在填充,我可以print_r()
和pr()
表单数据。我甚至可以发送邮件数据。但是,实际上并没有将数据保存到模型表中。数据库表名为contacts
,并包含以下字段:id, publication, company, name, email, phone, message, contact_method, selections, received
。
这是我的模特:
class Contact extends AppModel {
public $name = 'Contact';
public $useTable = 'contacts';
public $validate = array(
'name' => array(
'rule' => 'notEmpty'
),
'email' => array(
'rule' => 'notEmpty'
)
);
这是我的控制器:
App::uses('CakeEmail', 'Network/Email');
class ContactsController extends AppController
{
public $name = 'Contacts';
public $helpers = array('Html', 'Form', 'Js');
public $components = array('Email', 'Session');
...
public function contact_att() {
if ($this->request->is('post')) {
//pr($this->data);
if ($this->Contact->save($this->request->data)) {
$this->redirect('/pages/publications-alabama-turf-times');
$this->Session->setFlash("Mesage Saved!");
}
else {
print_r($this->data);
Configure::write('debug', 2);
debug($this->Contact->validationErrors);
exit;
}
}
以下是我认为的表格:
echo $this->Form->create('Contact', array(
'action' => 'contact_att',
'label' => '',
'class' => 'pubs'));
echo $this->Form->input('publication', array(
'type' => 'hidden',
'value' => 'A',
'label' => ''));
echo $this->Form->input('company', array(
'default' => 'company name (required)',
'onfocus' => 'clearDefault(this)',
'label' => array(
'text' => 'Company Name',
'style' => 'position:absolute;')));
echo $this->Form->input('name', array(
'default' => 'name (required)',
'onfocus' => 'clearDefault(this)',
'label' => array(
'text' => 'Your Name',
'style' => 'position:absolute;')));
echo $this->Form->input('phone', array(
'default' => 'phone number (required)',
'onfocus' => 'clearDefault(this)',
'label' => array(
'text' => 'Your Phone Number',
'style' => 'position:absolute;')));
echo $this->Form->input('email', array(
'default' => 'email (required)',
'onfocus' => 'clearDefault(this)',
'label' => array(
'text' => 'Your Email Address',
'style' => 'position:absolute;')));
echo $this->Form->input('message', array(
'label' => array(
'text' => 'Your Message',
'style' => 'position:absolute;')));
echo $this->Form->input('contact_method', array(
'type' => 'radio',
'style' => 'padding-right:20px;',
'legend' => 'Preferred contact method:',
'options' => array(
'phone' => 'phone',
'email' => 'email'
)
));
echo $this->Form->input('selections', array(
'type' => 'select',
'label' => array(
'text' => 'I am interested in the following:',
'style' => 'display:block; width:250px; margin-left:-12px;padding-bottom:15px;'),
'multiple' => 'checkbox',
'options' => array(
'ABC' => 'ABC',
'DEF' => 'DEF',
'GHI' => 'GHI'
)
));
echo $this->Form->end('Submit');
我错过了什么?
答案 0 :(得分:2)
经过多次敲打桌面后,答案结果很简单 - 当然。我只是从我的模型中删除了这一行。我认为将它设置为正确的表格会很好,但事实证明,它需要被移除:
public $useTable = 'contacts';
答案 1 :(得分:0)
你可以试试这个:
$this->Contact->save($this->request->data, false);
答案 2 :(得分:0)
尝试:
debug($this->model->invalidFields());
有时,模型在验证时会出错,而不会在validationErrors()
中显示还要注意这个..
如果未提供$ fieldList,恶意用户可以向表单数据添加其他字段(如果您不使用SecurityComponent),以及此更改字段本来不打算更改。
http://book.cakephp.org/2.0/en/models/saving-your-data.html
需要一些时间阅读本文档非常重要,希望对您有所帮助。
答案 3 :(得分:0)
朋友,我看到你的问题了,检查..
您的控制器中缺少此行
public $uses = array('Contact');
然后尝试,然后你告诉我......
答案 4 :(得分:0)
当表单设置已发布的隐藏标志时,post仅返回true。所以试试吧。
if(!empty($this->request->data))
答案 5 :(得分:0)
请添加此行
$this->Contact->create();
在尝试使用保存之前
if ($this->Contact->save($this->request->data)) {