我已经安装了 CI 2.0.3 和 GC 1.1.4 进行测试,因为乍一看你的代码看起来不错。事实证明,它是并且您的代码有效。我用 GC修改了控制器中的开箱即用employees_management
方法。examples
在数据库中添加了一个 user_password 列,并将您的代码添加到控制器中。
该代码既确保密码字段匹配,又确保它们在提交时不为空。
- 空结果
"The Password field is required"
- 结果不匹配
"The Password field does not match the konfirmpass field."
也许如果这对您不起作用,您应该发布您的整个方法,而不仅仅是规则和回调,以便我们查看是否还有其他问题。
编辑
要编辑该字段,只有在密码已被编辑后,您才需要添加
$crud->callback_before_update( array( $this,'update_password' ) );
function update_password( $post ) {
if( empty( $post['user_password'] ) ) {
unset($post['user_password'], $post['konfirmpass']);
}
return $post;
}
然而,这可能意味着您需要根据回调运行的顺序删除空密码的验证(如果它们在表单验证运行之前或之后)。如果它们在表单验证之前运行,您还需要callback_before_insert()
在两个回调中运行调用并添加验证规则。Insert 显然需要required
规则,而 update 不需要。
编辑 2,对编辑 1 的澄清
经过调查,验证在回调之前运行,因此您无法在回调函数中设置验证规则。为此,您需要使用一个名为的函数,该函数getState()
允许您根据 CRUD 执行的操作添加逻辑。
在这种情况下,我们只想在required
添加行时设置密码字段,而在更新时不需要。
因此,除了上述回调之外update_password()
,您还需要将表单验证规则包装在状态检查中。
if( $crud->getState() == 'insert_validation' ) {
$crud->set_rules('user_password', 'Password', 'trim|required|matches[konfirmpass]');
$crud->set_rules('konfirmpass', 'Konfirmasi Password', 'trim|required');
}
如果 CRUD 正在插入,这将添加验证选项。