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;
    }
}

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

4

1 回答 1

0

我认为,问题在于,在调用 save 之前,您正在控制器中进行验证查找。Save 会自动调用您的验证,因此您无需先查找它,这就是 Unique 规则的全部意义,它会为您完成。

'required' => true如果您希望该字段有效, 您可能还想添加到您的验证中。

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

于 2013-02-05T09:53:34.917 回答