cakephp验证没有save()

时间:2012-01-27 13:39:21

标签: validation cakephp

我正在尝试使用CakePHP验证而不使用save()。 但它总是会返回错误。我插入文本,但验证说它是空的。为什么呢?

我的模特:

var $validate = array(
    'm_subject' => array(           
        'empty' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'allowEmpty' => false,
            'message' => 'Subject is empty',
        )
    ),
    'm_text' => array(
        'empty' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'allowEmpty' => false,
            'message' => 'Text is empty',
        )
    )
);

在我的控制器中:

$this->Admin->set($this->data);
if($this->Admin->validates($this->data, array('m_subject', 'm_text'))) {
    //OK
}
else {          
    $errors = $this->Admin->invalidFields();
    pr($errors); //Always returns "Subject is empty" and "Text is empty".
}

5 个答案:

答案 0 :(得分:10)

CakePHP 2.0CakePHP 1.3

如果您向$this->ModelName->validates();传递任何内容,则

validates()不会获取数据数组。它是一个选项数组,然后由modelCallback beforeValidates()

处理

如果您想确定数据是否有效,请尝试使用此逻辑:

$this->ModelName->set($this->data);
if ($this->ModelName->validates()) {
    // Data Validated
} else {
    // Data Not Validated
}

答案 1 :(得分:2)

多数民众赞成因为你不应该在这种情况下使用必需品。 它需要将这些字段存在于$ this->数据中。

在这里阅读有关它的部分: http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/

哦,现在我看到了问题。你正在使用validates()错误!您需要先设置数据:

$this->User->set($this->data);
$res = $this->User->validates();

但这很好记录......

答案 2 :(得分:1)

在类似的说明in CakePHP 2.0 Model上,只有saveAll()验证选项。

  

validate:设置为false表示禁用验证,true表示在保存之前验证每条记录,“first”表示在保存任何记录之前验证所有记录(默认值),或“仅”表示仅验证记录,但不保存它们。

答案 3 :(得分:0)

一切都很好看。如果您使用cakephp的方法创建表单

,请确保在视图中您创建了这样的表单
<?php echo $this->Form->create("Admin"); ?>

此处“管理员”是型号名称。

答案 4 :(得分:0)

分配

$this->data['ModelName']['m_subject'] = $this->data['ModelName']['m_subject']['name']
$this->data['ModelName']['m_text'] = $this->data['ModelName']['m_text']['name']

因为

由于文件上传始终是一个数组,它将如下所示。

 'm_subject' => array(
        'name' => 'foobar',
        'size' => 1234567,
        'error' => 0,
        ...
     )

所以它总会给你错误。因为它正在寻找字符串并找到数组。