2012-07-14 118 views
2

我剛剛開始使用CodeIgniter的一個小頁面,並希望運行CodeIgniter的表單驗證魔術技巧。對於這一點,我已經通過config/form_validation.php設定一些規則:合併CodeIgniter表單驗證規則

$config = array(
    array(
     'field' => 'name', 
     'label' => 'Name', 
     'rules' => 'trim|required|max_length[64]' 
    ) 
); 

但除此之外,我想設置控制器本身裏面的一些特定的規則。

$this->form_validation->set_rules('name', 'Name', ' is_unique[table.name]'); 

我的問題 - 具體set_rules()似乎已重置所有以前定義的規則。

有沒有辦法將兩套規則合併?或者我錯過了一個方法嗎?

回答

1

最好在每個控制器的配置文件中定義命名數組,並按照Codeginiter用戶指南中的說明使用它。

$config = array(
      'signup' => array(
           array(
             'field' => 'username', 
             'label' => 'Username', 
             'rules' => 'required' 
            ), 
           array(
             'field' => 'password', 
             'label' => 'Password', 
             'rules' => 'required' 
            ), 
           array(
             'field' => 'passconf', 
             'label' => 'PasswordConfirmation', 
             'rules' => 'required' 
            ), 
           array(
             'field' => 'email', 
             'label' => 'Email', 
             'rules' => 'required' 
            ) 
           ), 
      'email' => array(
           array(
             'field' => 'emailaddress', 
             'label' => 'EmailAddress', 
             'rules' => 'required|valid_email' 
            ), 
           array(
             'field' => 'name', 
             'label' => 'Name', 
             'rules' => 'required|alpha' 
            ), 
           array(
             'field' => 'title', 
             'label' => 'Title', 
             'rules' => 'required' 
            ), 
           array(
             'field' => 'message', 
             'label' => 'MessageBody', 
             'rules' => 'required' 
            ) 
           )       
      ); 

使用數組名稱調用它像$ this-> form_validation-> run('註冊')。

+0

葉,我問過我的問題後,我想到了這個解決方案。它應該解決我的問題,但是我想在每個控制器中指定一個附加規則的原因是因爲幾乎在這個配置中的每個命名數組看起來都是相同的,只是這一個is_unique語句:) – Pakuna 2012-07-15 06:46:39

0

我不能說我有很多CI的經驗,但據我所知,你應該可以附加額外的規則。如果做不到這一點考慮嘗試:

$config[] = array('name', 'Name', ' is_unique[erfolge.name]'); 
$this->form_validation->set_rules($config); 

或使用array_merge如果你不想修改你的標準配置。

2

我以前有過這個確切的問題 - 我想使用一組規則,但爲特定的控制器添加一個額外的規則。

不幸的是你是正確的 - form_validation將覆蓋舊的規則。你甚至不能從配置中調用包含舊規則的變量 - 因爲它沒有以可訪問的格式存儲。

我這樣做的方式是將通用配置文件中的規則定義爲數組,然後在控制器中加載數組,然後添加新規則,然後將整個數組設置爲規則集。

另一種方法是在配置文件中定義兩個不同的規則集(即使它們可能幾乎相同) - 並根據需要調用不同的規則集。

+0

這是我一直面對的確切問題但只是爲了一個額外的規則,我必須創建一個新的組,這似乎很奇怪,但我認爲這是唯一的出路,我甚至試圖合併兩個組和訪問沒有成功http://stackoverflow.com/questions/29789238/可以-I-使用驗證規則式-Cl - 上的-相同元件-兩次/ – NaveenThally 2015-04-22 10:13:20