我正在尝试使用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".
}
答案 0 :(得分:10)
$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,
...
)
所以它总会给你错误。因为它正在寻找字符串并找到数组。