CakePHP验证错误不显示非'id'的主键

时间:2013-02-05 00:22:52

标签: php html cakephp cakephp-2.0

我有一个主键为'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;
    }
}

注意:错误消息适用于我没有主键的其他字段。

1 个答案:

答案 0 :(得分:0)

我认为问题是,在调用save之前,您正在控制器中进行验证查找。保存会自动调用您的验证,因此您无需先查找,这是唯一规则的重点,它会为您完成。

如果您希望该字段有效,您可能还需要在验证中添加'required' => true

但是,在我看来,让用户在数据库中输入主键字段是不好的做法。它应该自动生成并且对用户不可见。