2013-03-04 61 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字段具有某些值。

希望这会有所帮助。干杯!!!