我有一个主键为'staff_code'的模型
我有以下客户验证规则:
public $validate = array(
'staff_code' => array(
'unique' => array(
'rule' => 'isUnique',
'message' => 'This Staff Code already exists',
'last' => true
),
'sc_required' => array(
'rule' => 'notEmpty',
'message' => 'The Staff Code must be specified',
))
);
当字段不唯一时,验证错误不会显示
有没有人克服这个错误,我认为它与用户输入的主键有关。
我必须保持架构的原样,因为它被其他软件使用,并且改变它的工作方式将是一个真正的噩梦。
不确定是否需要,但我的观点是:
<?php
echo $this->Form->create('Staff');
echo $this->Form->inputs(array(
'staff_code' => array('type' => 'text', 'autocomplete' => 'off'),
'login_name' => array('type' => 'text', 'autocomplete' => 'off'),
'person_name' => array('type' => 'text', 'autocomplete' => 'off'),
'password',
'_allowed_to_do_po',
'is_active'
));
echo $this->Form->input('role', array('options' =>
array('user' => 'user', 'admin' => 'admin'), 'empty' => false, 'default'=>'user'));
echo $this->Form->end(array(
'label' => 'Save',
'class' => 'btn'
));
?>
...以及Staff控制器的自定义保存功能:
function emSave($data) {
if (!$this->find('first', array('conditions' => array('staff_code' => $data['Staff']['staff_code'])))) {
if ($this->save($data)) {
return true;
} else {
return false;
}
} else {
return false;
}
}
注意:错误消息适用于我没有主键的其他字段。
答案 0 :(得分:0)
我认为问题是,在调用save之前,您正在控制器中进行验证查找。保存会自动调用您的验证,因此您无需先查找,这是唯一规则的重点,它会为您完成。
如果您希望该字段有效,您可能还需要在验证中添加'required' => true
。
但是,在我看来,让用户在数据库中输入主键字段是不好的做法。它应该自动生成并且对用户不可见。