2011-09-23 31 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

相關問題