2013-07-10 22 views
1

繼CI user_guide工作,我已經創建了一個名爲「form_validation.php」配置文件,在它下面的組:笨自動加載表單驗證規則設置爲不帶參數

$config = array(
'user/create' => array(
    array(
     'field' => 'id', 
     'label' => '', 
     'rules' => '' 
    ), 
    array(
     'field' => 'first_name', 
     'label' => 'lang:First name', 
     'rules' => 'required|max_length[30]' 
    ),...   
), 
'user/update' => array(
    array(
     'field' => 'id', 
     'label' => '', 
     'rules' => '' 
    ), 
    array(
     'field' => 'first_name', 
     'label' => 'lang:First name', 
     'rules' => 'required|max_length[30]' 
    ),... 
) 
); 

在我的「用戶」控制器,當我調用'create'方法時,因此使用URL http://localhost/my_ci_application/user/create,語句$this->form_validation->run()自動運行我的配置文件中定義的第一組規則。這是我在用戶指南中讀到的預期行爲。

但是,當我運行以下URL http://localhost/my_ci_application/user/update/1來更新ID爲1的用戶時,它不會自動加載「用戶/更新」規則集。看起來好像是因爲這個參數,CI希望找到一個'user/update/1'規則集,這當然是我無法創建的,因爲我的用戶ID在調用這個方法時會一直在變化。

我理解這個權利嗎?如果是的話,那麼這是一個遺憾,因爲我認爲標準的CI URL是這樣形成的:controller/method/parameters ...所以我希望表單驗證類只考慮前兩個URI段?

僅供參考,如果我在user.update方法下面寫的,我驗證規則做工精細:

$this->form_validation->run('user/update') 

所以我的問題是真的,如果我正確或不理解規則的自動加載,如果有是我們可以做什麼來自動加載這些規則,即使使用具有某些參數的方法。

非常感謝你提前。

回答

0

如果我understant這個問題,你也會需要調用驗證,例如:

$this->lang->load('form_validation', 'portuguese'); //if u have order language 
if($this->form_validation->run('user/update') == FALSE) 
{ 
//msg error 
} 
else{ 
//save 
} 

要獲取URL銷u需要的值:

$this->uri->segment(3); 

我希望這有助於

+0

嗯,是真的,我知道我需要的那一刻,把「用戶/更新」通過運行調用驗證規則我自己()方法。我的問題更多的是要知道是否有某種配置需要在某個地方完成,以便CI不會採用所有的URI段但只有前兩個AUTOMATICALLY,以便我可以繼續使用'$ this-> form_validation-> run( )'沒有傳遞任何東西。 但無論如何,謝謝你。 –

1

在你的form_validation.php文件中:

$CI =& get_instance(); 

$config = array(
    'user/update/' . $CI->uri->segment(3) => array(
    .... 
    ) 
); 
0

您可以擴展庫來實現這一

application/libraries/MY_Form_validation.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class MY_Form_validation extends CI_Form_validation { 

    function run($group = '') 
    { 
     if($group == '') 
     { 
      $group = '/' . implode('/', array_slice($this->CI->uri->rsegment_array(), 0, 2)); 
     } 

     return parent::run($group); 
    } 

}