在我的控制器中,我正在尝试验证用户发送的一些数据,但奇怪的是,即使一切看起来都是正确的,验证也会失败:
if(isset($this->data['Cart'])) { //See below for what is in $this->data!!
$this->Cart->set($this->data);
if($this->Cart->validates()) {
这正是你应该如何在CakePHP v1.3中做到的(见http://book.cakephp.org/1.3/en/The-Manual/Common-Tasks-With-CakePHP/Data-Validation.html)
模特:
class Cart extends AppModel
{
var $useTable = false;
var $validate = array(
'name' => array(
'rule' => 'notEmpty',
'required' => true,
'message' => 'Geben Sie Ihren Namen ein!'
),
'address' => array(
'rule' => 'notEmpty',
'required' => true,
'message' => 'Geben Sie Straße und Hausnummer ein!'
),
'city' => array(
'rule' => 'notEmpty',
'required' => true,
'message' => 'Geben Sie Postleitzahl und Ort ein!'
),
'email' => array(
'rule' => 'notEmpty',
'required' => true,
'message' => 'Geben Sie Ihre E-Mail-Adresse ein!'
)
);
}
var_dump($this->data)
的结果:
array(2) {
["amount"]=>
array(2) {
["san02l"]=>
string(1) "5"
["pp02l"]=>
string(1) "1"
}
["Cart"]=>
array(7) {
["company"]=>
string(13) "SomeCompany"
["name"]=>
string(10) "Lars Ebert"
["address"]=>
string(17) "Street No"
["city"]=>
string(18) "12345 Somewhere"
["phone"]=>
string(10) "0123456789"
["email"]=>
string(22) "mail@example.com"
["comments"]=>
string(26) "Dies ist
nur
Ein Test!!"
}
}
每次都会显示所有四条错误消息。我习惯了CakePHP v2,所以也许我忽略了一些非常明显的东西?为什么不验证?
我也按照天行者的建议尝试了$this->Cart->set($this->data['Cart']);
和$this->Cart->set(array('Cart' => $this->data['Cart']));
。仍然显示所有四个错误。
同样奇怪:尝试$this->Cart->validates(array('fieldList' => array('name')))
时,会显示所有四个错误。在这种情况下不应该只显示一个错误吗?
问题似乎独立于$this->data
。我刚尝试手动设置名称:
if(isset($this->data['Cart'])) {
$this->Cart->set($this->data['Cart']);
$this->Cart->set('name', 'Lars Ebert');
if($this->Cart->validates()) {
这仍会导致显示所有错误消息。至少名称错误不应该消失吗?
答案 0 :(得分:0)
不知何故,CakePHP版本似乎与notEmpty规则有问题。我改变了我的模型,现在它起作用了:
var $validate = array(
'name' => array(
'rule' => array('minLength', 1),
'required' => true,
'allowEmpty' => false,
'message' => 'Geben Sie Ihren Namen ein!'
),
'address' => array(
'rule' => array('minLength', 1),
'required' => true,
'allowEmpty' => false,
'message' => 'Geben Sie Straße und Hausnummer ein!'
),
'city' => array(
'rule' => array('minLength', 1),
'required' => true,
'allowEmpty' => false,
'message' => 'Geben Sie Postleitzahl und Ort ein!'
),
'email' => array(
'rule' => array('minLength', 1),
'required' => true,
'allowEmpty' => false,
'message' => 'Geben Sie Ihre E-Mail-Adresse ein!'
)
);
答案 1 :(得分:-1)
也许你应该设置$ this-> data ['Cart']进行验证?您可以检查您的验证错误,如:
debug($this->Cart->validationErrors);
并且您希望保存数据您可以使用以下方式执行此操作:
// ...
if($this->Cart->save($this->request->data['Cart'])){
// ...
}else{
debug($this->Cart->validationErrors); die();
// ...
}
CakePhp默认设置validate => true
选项进行保存。
<强>更新强> 你也可以:
尝试使用型号名称验证数据,例如:
$this_data['Cart'] = $this->data['Cart'];
$this->Cart->set($this_data);
if ($this->Cart->validates()){
// ...
} else{
debug($this->Cart->invalidFields()); die();
}
将'allowEmpty' => false
设置为您的模型规则,例如:
_
var $validate = array(
'yourFieldName' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => '...'
)
);