我在CakePHP上开发了一个应用程序,但我是一个有数据验证的新手。 我需要的是在修改字段时检查日期时间值,因此我需要检查旧日期时间值并验证新值是否等于或更高。 我认为最好的是使用自定义验证,但不知道如何获得该字段的旧值,以及如何区分从创建到编辑。
这里有一个简单的例子:
1)我在我的数据库中注册一个新事件,它有名称,开始日期,结束日期,ecc ......
2)我想编辑这个事件,所以我插入一个新的开始和一个新的结束日期,现在我需要这个验证:
如果旧的结束值在新结束之前:
更新记录;
否则:
数据验证失败,不更新记录;
答案 0 :(得分:1)
数据验证在您的模型中进行(如果您真的需要,可以在您的控制器中完成,但如果在模型中完成,则Cake会使事情变得更容易。)
在“事件”模型中:
$public validate = array( //each field can have its own validation rule set here
'end_date' => array(
'rule' => 'customEndDateValidation', //the name of our custom validation function to use
'on' => 'update', //only do this when we update a record
'message' => 'New end date must be greater than previous end date' //message if validation fails
)
);
public function customEndDateValidation($check) {
//get previous end date
$old_record = $this->find(
'all',
array(
'conditions' => array(
'Event.id' => $this->data[$this->alias]['id']
),
'fields' => array(
'Event.end_date'
)
)
);
//if the new end date is greater than the old one return true - otherwise it will reach the return false
if (strtotime($check['end_date']) > strtotime($old_record['Event']['end_date'])) {
return TRUE;
}
return FALSE;
}
有关Cake中验证的更多信息,请查看http://book.cakephp.org/2.0/en/models/data-validation.html
答案 1 :(得分:0)
只需添加表格的两个属性:“created”和“modified”
这是CakePHP的标准
if isn't the answer that you search
//我的表
Project
[0]--Id
[1]--Name
[2]--DateEdit
[3]--OlderDateEdit
[4]--modified
[5]--created
// http://book.cakephp.org/2.0/en/models/data-validation.html#adding-your-own-validation-methods
//视图
<?php
echo $this->Form->input('Project.DateEdit',array("label"=>"Date edit"));
echo $this->Form->hidden('Project.OlderDateEdit');
// CONTROLLER
<?php
public function edit($id = null) {
if (empty($this->data)) {
$this->Project->id = $id;
$this->data = $this->Project->read();
$this->data['Project']['OlderDateEdit']=$this->data['Project']['DateEdit'];
}
else {
if ($this->Project->save($this->data['Project'])) {
}
}
}
// MODEL
<?php
class Project extends AppModel {
public $validate = array(
'verif_date' => array(
'rule' => array('comparison-Dte','OlderDateEdit'),
'message' => 'ur datetime is older'
)
);
// AppModel //
<?php
public function comparison-Dte($check, $limit) {
$valeur = array_values($check);
$valeur = $valeur[0];
$OldDateEdit = $limit;
));
return $NewDateEdit > $OldDateEdit;
}
}