2011-09-23 30 views
0

我有一种控制方法来处理一些可以在数据库上保存或更新的信息。针对同一控制器中不同操作的验证规则,需要采用不同的方法

我使用的是公共$验证存储与验证规则的数组是这样的:

public $validation = array(
    array(
     'field' => 'modelname[column1]', 
     'label' => 'Column 1', 
     'rules' => 'required' 
    ), 
    array(
     'field' => 'modelname[column1]', 
     'label' => 'Column 2', 
     'rules' => 'required' 
    ), 

);

我在回调函数中使用了我自己的验证函数。像这样:

array(
     'field' => 'modelname[column3]', 
     'label' => 'Column 3', 
     'rules' => 'callback_column3|required' 
    ), 
    array(
     'field' => 'modelname[column4]', 
     'label' => 'Column4', 
     'rules' => 'callback_column4|required' 
    ), 

这是用控制器中的动作处理的。 问题是:

对于添加(保存)我必须检查值的唯一性,这是callback_column4函数(假设),如果它不是唯一的,它返回false。但是,我不能为编辑(更新)返回false,因为我正在阅读和编辑显然在数据库中的东西。

那么,我应该怎么做,以验证时区分两种不同的行动。

PS:我已经尝试使用子阵与类/动作(http://codeigniter.com/user_guide/libraries/form_validation.html#savingtoconfig)的名字,但我使用的是Core_Model抽象播放调用

$this->form_validation->set_rules($this->validation); $this->form_validation->run()

+0

这里是一个后我就写Forrst可能会帮你出这一点:http://forrst.com/posts/Validating_Uniqueness_In_CodeIgniter_When_Updati-DDA –

回答

0

您可以添加验证规则的作用对于调用它的控制器方法中的输入,而不是试图将所有内容放在同一个数组中。这样你可以保留你所有其他规则的公开验证变量,但只需要单独为你设置一个问题。

您也可以为您的验证规则创建两个单独的数组,并针对其各自的方法调用每个数组。即

$this->form_validation->set_rules($this->create_validation); 

$this->form_validation->set_rules($this->edit_validation); 
+0

其实我发现两种方法(在你的答案后)。 在我刚刚添加的第一个控制器中执行保存方法,类似于 $ this - > _ model-> validation [] = array( 'field'=>'modelName [column4]', '标签'=>'column4', 'rules'=>'callback_unique' ); 但我认为你所说的更深(我不想将模型内容保存到控制器中),并创建了我所调用的公共$ create_validation,如$ this - > _ model-> form_validation-> set_rules( $这 - > _模型 - > create_validation); 一切正常...... txs – Djonatan

相关问题