2010-06-30 99 views
1

我正在尝试使用cakephp模型实现表单验证。这里是我的代码片段...Cakephp中的模型验证问题

型号

// File: /app/models/enquiry.php 
class Enquiry extends AppModel { 
    var $name = "Enquiry"; 
    var $useTable = false; 
    var $_schema = array(
     "name"  => array("type" => "string", "length" => 100), 
     "phone"  => array("type" => "string", "length" => 30), 
     "email"  => array("type" => "string", "length" => 255) 
    ); 
    var $validate = array(
     "name" => array(
      "rule" => array("minLength" => 1), 
      "message" => "Name is required" 
     ), 
     "email" => array(
      "emailFormat" => array("rule" => "notEmpty", "last" => true, "message" => "Email is required"), 
      "emailNeeded" => array("rule" => array("email", true), "message" => "Must be a valid email address") 
     ) 
    ); 
} 

控制器动作

// /app/controllers/nodes_controller.php 
class NodesController extends AppController { 

    var $name = "Nodes"; 
    var $uses = array("Enquiry"); 
    function enquire() { 
     if ($this->data) { 
     $this->Enquiry->set($this->data); 
     $this->Enquiry->set("data", $this->data); 
     if ($this->Enquiry->validates(
       array("fieldList" => array("name", "email")) 
      )) { 
      // ..... 
      } 
     } 
    } 
} 

查看....

// /app/views/nodes/enquire.ctp 
<?php echo $form->create("Node", array("action" => "ask")); ?> 
<?php echo $form->input("name", array("label" => "Name")); ?> 
<?php echo $form->input("email", array("label" => "Email")); ?> 
<?php echo $form->input("phone", array("label" => "Phone")); ?> 
<?php echo $form->end("Send");?> 

我的问题:在提交时,表单从不验证。即使我没有在表单中输入任何内容,validate函数也会每次都返回true。

我在做什么错?

Regards

回答

1

当你只有两个验证规则是没有意义的,列出在validates()要验证这两个领域。试试这个方法:

function enquire(){ 
    if($this->data){ 
     $this->Enquiry->set(this->data); 
     if($this->Enquiry->validates()){ 
      // it validated logic 
     }else{ 
      // didn't validate logic 
     } 
    } 
} 

您的验证阵列应该是(遵循语法一致性):

var $validate = array(
    'name' => array(
     'notEmpty' => array(
      'rule' => 'notEmpty', 
      'message' => 'Name is required' 
     ) 
    ), 
    'email' => array(
     'emailFormat' => array(
      'rule' => 'notEmpty', 
      'message' => 'Email is required' 
     ), 
     'emailNeeded' => array(
      'rule' => array('email', true), 
      'message' => 'Must be a valid email address' 
     ) 
    ) 
); 
+0

这并不工作。现在我看到$ this-> Model-> validates()返回false,但我仍然看不到出现的错误消息。我需要在我的模型中使用invalidate()方法吗? – vikmalhotra 2010-07-01 01:54:52

+0

我刚刚检查了invalidFields数组,它在那里显示无效字段。但是错误信息并没有以形式出现...... – vikmalhotra 2010-07-01 02:02:14

+0

这很奇怪。尝试'$ form-> error('email');' – bancer 2010-07-01 02:56:41

1

我认为你的错误数据传入验证。将其具有$this->data我只想叫

$this->Model->validates(); 
// or 
$this->Model->validates($this->data);