CakePHP:为什么验证无法运行?

时间:2010-06-19 17:16:31

标签: php cakephp

我已开始研究CakePHP以提高我的工作效率。问题是我遇到了一个小问题,这让我在一个多小时内被占用 - 当提交表单时,它没有经过验证。

即使我故意将这两个字段留空,它仍会保存并发出OK消息。

希望有人能帮助我重新开始。如果有人知道一个活跃的CakePHP论坛,我会很感激链接。

goods_controller.php

<?php
class GoodsController extends AppController {
 var $name = 'Goods';

  function index() {
    $this->set('goods',$this->Good->find('all'));
  }

  function view($id = NULL) {
    //list of fields+id, null meaning take all
    $this->set('good',$this->Good->read(NULL, $id));
  }

  function add() {
    //Is it not empty? Then lets go on and save the data  
    if(!empty($this->data)) {      
      $this->Good->Create();
        if($this->Good->save($this->data)){
          $this->Session->setFlash('Varen blev gemt succesfuldt');
          //$this->redirect(array('action'=>'index'));
        } else {
          $this->Session->setFlash('Varen kunne desværre ikke gemmes, prøv venligst igen!');
        }
    } 
  }

} 
?>

add.ctp

<h1>Add Post</h1>
<?php
  echo $form->create('Good', array('action'=>'add'));
  echo $form->input('headline_dk');
  echo $form->error('headline_dk');
  echo $form->input('text_dk');
  echo $form->error('text_dk');
  echo $form->end('Indsæt vare');
?>

goods.php

class Good extends AppModel {
  var $name = 'Good';

  var $validate = array(    
    'headline_dk' => array(
      'rule' => 'notEmpty',
      'message' => 'Angiv venligst en titel'
    ),

    'headline_dk' => array(
      'rule' => array('between', 5, 255),
      'message' => 'Titlen skal være mellem fem og 255 tegn'
    )

    'text_dk' => array(
    'required' => true,
    'message' => 'Angiv venligst en beskrivelse af varen'
    )
};

2 个答案:

答案 0 :(得分:1)

您为单个字段分配了多个验证规则,但在您的模型中,var $validate代码有'headline_dk'的两个分配...而应该看起来像这样:

var $validate = array(
  'headline_dk' => array(
    'headline-rule-1' => array(
      'rule' => 'notEmpty',  
      'message' => 'Angiv venligst en titel'
    ),
    'headline-rule-2' => array(
      'rule' => array('between', 5, 255),  
      'message' => 'Titlen skal være mellem fem og 255 tegn'
    )  
  )
);

这可能不是唯一的问题,但它可能导致验证不起作用。另请参阅this page in the documentation

答案 1 :(得分:0)

$this->Good->create();中的“创建”应为小写。

更新:尝试以下语法:

var $validate = array(    
    'headline_dk' => array(
        'between' => array(
            'rule' => array('between', 5, 255),
            'message' => 'Titlen skal være mellem fem og 255 tegn'
        )
    )
);