?
This document uses PHP Chinese website manual Release
CodeIgniter提供了一個(gè)全面的表單驗(yàn)證和數(shù)據(jù)準(zhǔn)備類,有助于最小化您編寫的代碼量。
頁面內(nèi)容
表單驗(yàn)證
表格
成功頁面
控制器
嘗試一下!
說明
設(shè)置驗(yàn)證規(guī)則
使用數(shù)組設(shè)置規(guī)則
級聯(lián)規(guī)則
準(zhǔn)備數(shù)據(jù)
重新填寫表單
回調(diào):您自己的驗(yàn)證方法
可調(diào)用:通常使用任何東西
設(shè)置錯(cuò)誤消息
翻譯字段名稱
更改錯(cuò)誤分隔符
單獨(dú)顯示錯(cuò)誤
驗(yàn)證數(shù)組(非$ _POST)
概觀
表單驗(yàn)證教程
- [Saving Sets of Validation Rules to a Config File](about:blank#saving-sets-of-validation-rules-to-a-config-file) - [How to save your rules](about:blank#how-to-save-your-rules) - [Creating Sets of Rules](about:blank#creating-sets-of-rules) - [Calling a Specific Rule Group](about:blank#calling-a-specific-rule-group) - [Associating a Controller Method with a Rule Group](about:blank#associating-a-controller-method-with-a-rule-group)
- [Using Arrays as Field Names](about:blank#using-arrays-as-field-names)- [Rule Reference](about:blank#rule-reference)- [Prepping Reference](about:blank#prepping-reference)- [Class Reference](about:blank#class-reference)- [Helper Reference](about:blank#helper-reference)
在解釋CodeIgniter的數(shù)據(jù)驗(yàn)證方法之前,先介紹一下理想的情況:
將顯示一個(gè)表單。
您填寫并提交。
如果您提交的內(nèi)容無效,或者可能錯(cuò)過了必填項(xiàng)目,則會重新顯示包含您的數(shù)據(jù)的表單以及描述問題的錯(cuò)誤消息。
此過程將繼續(xù),直到您提交了有效的表單。
在接收端,腳本必須:
檢查所需的數(shù)據(jù)。
驗(yàn)證數(shù)據(jù)的類型是否正確,并且符合正確的標(biāo)準(zhǔn)。例如,如果提交用戶名,則必須驗(yàn)證它是否僅包含允許的字符。它必須是最小長度,并且不能超過最大長度。用戶名不能是別人現(xiàn)有的用戶名,或者甚至可能是保留字。等等。
清理數(shù)據(jù)的安全性。
如果需要,預(yù)格式化數(shù)據(jù)(數(shù)據(jù)是否需要修剪?HTML編碼等)
準(zhǔn)備數(shù)據(jù)以便在數(shù)據(jù)庫中插入。
雖然上述過程沒有什么特別復(fù)雜,但它通常需要大量的代碼,并且要顯示錯(cuò)誤消息,各種控制結(jié)構(gòu)通常放在HTML表單中。表單驗(yàn)證盡管很容易創(chuàng)建,但實(shí)現(xiàn)起來通常非常繁瑣和繁瑣。
以下是實(shí)施CodeIgniters表單驗(yàn)證的“實(shí)踐”教程。
為了實(shí)現(xiàn)表單驗(yàn)證,你需要三件事情:
包含表單的視圖文件。
包含成功提交后將顯示“成功”消息的視圖文件。
接收和處理提交的數(shù)據(jù)的控制器方法。
讓我們創(chuàng)建這三件事,以會員注冊表單為例。
使用文本編輯器創(chuàng)建一個(gè)名為myform.php的表單。在其中,放置此代碼并將其保存到您的應(yīng)用程序/視圖/文件夾中:
<html><head><title>My Form</title></head><body><?php echo validation_errors(); ?><?php echo form_open('form'); ?><h5>Username</h5><input type="text" name="username" value="" size="50" /><h5>Password</h5><input type="text" name="password" value="" size="50" /><h5>Password Confirm</h5><input type="text" name="passconf" value="" size="50" /><h5>Email Address</h5><input type="text" name="email" value="" size="50" /><div><input type="submit" value="Submit" /></div></form></body></html>
使用文本編輯器創(chuàng)建一個(gè)名為formsuccess.php的表單。在其中,放置此代碼并將其保存到您的應(yīng)用程序/視圖/文件夾中:
<html><head><title>My Form</title></head><body><h3>Your form was successfully submitted!</h3><p><?php echo anchor('form', 'Try it again!'); ?></p></body></html>
使用文本編輯器創(chuàng)建一個(gè)名為Form.php的控制器。在它中,放置這些代碼并將其保存到您的應(yīng)用程序/控制器/文件夾中:
<?phpclass Form extends CI_Controller { public function index() { $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } }}
要嘗試表單,請使用類似下面的網(wǎng)址訪問您的網(wǎng)站:
example.com/index.php/form/
如果您提交表單,則只需查看表單重新加載。那是因?yàn)槟氵€沒有設(shè)置任何驗(yàn)證規(guī)則。
既然你還沒有告訴Form Validation類來驗(yàn)證任何東西,它默認(rèn)返回FALSE(boolean false)。The run()
方法只會返回TRUE,如果它已成功應(yīng)用您的規(guī)則,而沒有任何失敗。
你會注意到關(guān)于上述頁面的幾件事情:
表單(myform.php)是一個(gè)標(biāo)準(zhǔn)的Web表單,除了兩個(gè)例外:
它使用表單助手來創(chuàng)建表單打開。從技術(shù)上講,這是沒有必要的。您可以使用標(biāo)準(zhǔn)HTML創(chuàng)建表單。但是,使用助手的好處是它會根據(jù)配置文件中的URL為您生成操作URL。這使您的應(yīng)用程序在您的URL更改時(shí)更具可移植性。
在窗體的頂部,您會注意到以下函數(shù)調(diào)用:<?php echo validation \ _errors(); ?>該函數(shù)將返回驗(yàn)證器發(fā)回的任何錯(cuò)誤消息。如果沒有消息,它將返回一個(gè)空字符串。
控制器(Form.php)有一個(gè)方法:index()
。此方法初始化驗(yàn)證類并加載視圖文件使用的表單助手和URL助手。它也運(yùn)行驗(yàn)證程序。根據(jù)驗(yàn)證是否成功,它會顯示表單或成功頁面。
CodeIgniter允許您為給定字段設(shè)置盡可能多的驗(yàn)證規(guī)則,將它們按順序級聯(lián),甚至可以讓您同時(shí)準(zhǔn)備和預(yù)處理字段數(shù)據(jù)。要設(shè)置驗(yàn)證規(guī)則,您將使用以下set_rules()
方法:
$this->form_validation->set_rules();
上述方法以三個(gè)參數(shù)作為輸入:
字段名稱 - 您給出表單字段的確切名稱。
該字段的“人類”名稱,將插入錯(cuò)誤消息中。例如,如果您的字段被命名為“用戶”,則可以給它一個(gè)人名“用戶名”。
此表單字段的驗(yàn)證規(guī)則。
(可選)根據(jù)當(dāng)前字段的任何規(guī)則設(shè)置自定義錯(cuò)誤消息。如果沒有提供將使用默認(rèn)的。
注意
如果您希望將字段名稱存儲在語言文件中,請參閱翻譯字段名稱。
這是一個(gè)例子。在你的控制器(Form.php)中,在驗(yàn)證初始化方法的下面添加下面的代碼:
$this->form_validation->set_rules('username', 'Username', 'required');$this->form_validation->set_rules('password', 'Password', 'required');$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');$this->form_validation->set_rules('email', 'Email', 'required');
你的控制器應(yīng)該看起來像這樣:
<?phpclass Form extends CI_Controller { public function index() { $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Username', 'required'); $this->form_validation->set_rules('password', 'Password', 'required', array('required' => 'You must provide a %s.') ); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required'); $this->form_validation->set_rules('email', 'Email', 'required'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } }}
現(xiàn)在提交表單的空白字段,你應(yīng)該看到錯(cuò)誤信息。如果您填寫填寫了所有字段的表單,您將看到您的成功頁面。
注意
出現(xiàn)錯(cuò)誤時(shí),表單字段尚未用數(shù)據(jù)重新填充。我們很快會做到。
在繼續(xù)之前,應(yīng)該注意的是,如果您希望在一個(gè)操作中設(shè)置所有規(guī)則,則可以將規(guī)則設(shè)置方法傳遞給數(shù)組。如果您使用此方法,則必須按照指示命名您的數(shù)組鍵:
$config = array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required', 'errors' => array( 'required' => 'You must provide a %s.', ), ), array( 'field' => 'passconf', 'label' => 'Password Confirmation', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'Email', 'rules' => 'required' ) ); $this->form_validation->set_rules($config);
CodeIgniter允許你將多個(gè)規(guī)則放在一起。我們來試試吧。在規(guī)則設(shè)置方法的第三個(gè)參數(shù)中更改您的規(guī)則,如下所示:
$this->form_validation->set_rules('username', 'Username','required|min_length[5]|max_length[12]|is_unique[users.username]',array( 'required' => 'You have not provided %s.', 'is_unique' => 'This %s already exists.' ) ); $this->form_validation->set_rules('password', 'Password', 'required'); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required|matches[password]'); $this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
上面的代碼設(shè)置了以下規(guī)則:
用戶名字段不能少于5個(gè)字符,也不能超過12個(gè)。
密碼字段必須與密碼確認(rèn)字段匹配。
電子郵件字段必須包含有效的電子郵件地址。
試一試!提交表單時(shí)沒有正確的數(shù)據(jù),您會看到與新規(guī)則相對應(yīng)的新錯(cuò)誤消息。有許多規(guī)則可供您在驗(yàn)證參考中閱讀。
注意
您也可以傳遞一組規(guī)則來set_rules()
代替字符串。例:
$this->form_validation->set_rules('username', 'Username', array('required', 'min_length[5]'));
除了上面我們使用的驗(yàn)證方法之外,您還可以用各種方式準(zhǔn)備數(shù)據(jù)。例如,你可以設(shè)置這樣的規(guī)則:
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]'); $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]'); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required|matches[password]'); $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
在上面的例子中,我們正在“修剪”這些字段,在必要時(shí)檢查長度并確保兩個(gè)密碼字段匹配。
接受一個(gè)參數(shù)的任何天然PHP功能可以作為一條規(guī)則,等htmlspecialchars()
,trim()
等。
注意
您通常會在驗(yàn)證規(guī)則之后使用準(zhǔn)備功能,因此如果出現(xiàn)錯(cuò)誤,原始數(shù)據(jù)將顯示在表單中。
到目前為止,我們只處理錯(cuò)誤?,F(xiàn)在是用提交的數(shù)據(jù)重新填充表單字段的時(shí)候了。CodeIgniter提供了幾個(gè)幫助函數(shù),允許你這樣做。你最常用的一個(gè)是:
set_value('field name')
打開myform.php視圖文件和更新值中使用的每個(gè)字段set_value()
的功能:
不要忘記在php:func:set\_value()
函數(shù)調(diào)用中包含每個(gè)字段名稱!
<html><head><title>My Form</title></head><body><?php echo validation_errors(); ?><?php echo form_open('form'); ?><h5>Username</h5><input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /><h5>Password</h5><input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" /><h5>Password Confirm</h5><input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" /><h5>Email Address</h5><input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" /><div><input type="submit" value="Submit" /></div></form></body></html>
現(xiàn)在重新加載頁面并提交表單,以便觸發(fā)錯(cuò)誤。您的表單字段現(xiàn)在應(yīng)該重新填充
注意
下面的類參考部分包含允許您重新填充<select>菜單,單選按鈕和復(fù)選框的方法。
重要
如果使用數(shù)組作為表單域的名稱,則必須將其作為數(shù)組提供給函數(shù)。例:
<input type="text" name="colors[]" value="<?php echo set_value('colors[]'); ?>" size="50" />
欲了解更多信息,請參閱下面的使用數(shù)組作為字段名稱部分。
驗(yàn)證系統(tǒng)支持回調(diào)你自己的驗(yàn)證方法。這允許您擴(kuò)展驗(yàn)證類以滿足您的需求。例如,如果您需要運(yùn)行數(shù)據(jù)庫查詢來查看用戶是否選擇了唯一的用戶名,則可以創(chuàng)建一個(gè)回調(diào)方法來實(shí)現(xiàn)此目的。我們來創(chuàng)建一個(gè)這樣的例子。
在您的控制器中,將“用戶名”規(guī)則更改為:
$this->form_validation->set_rules('username', 'Username', 'callback_username_check');
然后添加一個(gè)稱為username_check()
您的控制器的新方法。以下是您的控制器現(xiàn)在的外觀:
<?phpclass Form extends CI_Controller { public function index() { $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Username', 'callback_username_check'); $this->form_validation->set_rules('password', 'Password', 'required'); $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required'); $this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } } public function username_check($str) { if ($str == 'test') { $this->form_validation->set_message('username_check', 'The {field} field can not be the word "test"'); return FALSE; } else { return TRUE; } }}
重新載入您的表格并將其用“test”作為用戶名提交。您可以看到表單字段數(shù)據(jù)已傳遞給您的回調(diào)方法供您處理。
要調(diào)用回調(diào),只需將方法名稱放在規(guī)則中,并將“callback_”作為規(guī)則前綴。如果你需要在你的回調(diào)方法中接收一個(gè)額外的參數(shù),只需要在方括號之后的方括號后面添加它,如:callback_foo[bar]
,然后它將作為回調(diào)方法的第二個(gè)參數(shù)傳遞。
注意
您也可以處理傳遞給您的回調(diào)的表單數(shù)據(jù)并將其返回。如果您的回調(diào)函數(shù)返回布爾值TRUE / FALSE以外的任何值,則假定該數(shù)據(jù)是您新處理的表單數(shù)據(jù)。
如果回調(diào)規(guī)則對您來說不夠好(例如,因?yàn)樗鼈儍H限于您的控制器),請不要感到失望,還有一種方法可以創(chuàng)建自定義規(guī)則:任何is_callable()
會返回TRUE的規(guī)則。
考慮下面的例子:
$this->form_validation->set_rules( 'username', 'Username', array( 'required', array($this->users_model, 'valid_username') ));
上面的代碼將使用valid_username()
你的Users_model
對象的方法。
這僅僅是一個(gè)例子,回調(diào)不限于模型。您可以使用接受該字段值作為其第一個(gè)參數(shù)的任何對象/方法。你也可以使用匿名函數(shù):
$this->form_validation->set_rules( 'username', 'Username', array( 'required', function($value) { // Check $value } ));
當(dāng)然,由于Callable規(guī)則本身不是一個(gè)字符串,它也不是規(guī)則名稱。當(dāng)你想為它們設(shè)置錯(cuò)誤信息時(shí),這是一個(gè)問題。為了解決這個(gè)問題,可以將這樣的規(guī)則放在數(shù)組的第二個(gè)元素中,第一個(gè)元素是規(guī)則名稱:
$this->form_validation->set_rules( 'username', 'Username', array( 'required', array('username_callable', array($this->users_model, 'valid_username')) ));
匿名功能版本:
$this->form_validation->set_rules( 'username', 'Username', array( 'required', array( 'username_callable',function($str){ // Check validity of $str and return TRUE or FALSE } ) ));
所有本地錯(cuò)誤消息都位于以下語言文件中:system / language / english / form_validation_lang.php
要為規(guī)則設(shè)置自己的全局自定義消息,您可以通過在應(yīng)用程序/ language / english / form_validation_lang.php中創(chuàng)建自己的語言來擴(kuò)展/覆蓋語言文件(在Language Class文檔中閱讀更多內(nèi)容),或者使用以下方法:
$this->form_validation->set_message('rule', 'Error Message');
如果您需要為特定規(guī)則的特定字段設(shè)置自定義錯(cuò)誤消息,請使用set_rules()方法:
$this->form_validation->set_rules('field_name', 'Field Label', 'rule1|rule2|rule3', array('rule2' => 'Error Message on rule2 for this field_name'));
其中規(guī)則對應(yīng)于特定規(guī)則的名稱,錯(cuò)誤消息是您希望顯示的文本。
如果您想要包含字段的“人名”名稱或某些規(guī)則允許的可選參數(shù)(例如max_length),則可以分別將{field}和{param}標(biāo)記添加到您的消息中:
$this->form_validation->set_message('min_length', '{field} must have at least {param} characters.');
在具有人名用戶名和min_length5規(guī)則的字段中,將顯示錯(cuò)誤:“用戶名必須至少包含5個(gè)字符?!?/p>
注意
在錯(cuò)誤消息sprintf()
中使用%s的舊方法仍然有效,但它會覆蓋上面的標(biāo)記。你應(yīng)該使用一個(gè)或另一個(gè)。
在上面的回調(diào)規(guī)則示例中,通過傳遞方法的名稱(不帶“callback_”前綴)來設(shè)置錯(cuò)誤消息:
$this->form_validation->set_message('username_check')
如果您想將傳遞給該set_rules()
方法的“人”名稱存儲在語言文件中,并因此使該名稱能夠被翻譯,請執(zhí)行以下操作:
首先,用lang:作為你的“人類”名稱的前綴,如下例所示:
$this->form_validation->set_rules('first_name', 'lang:first_name', 'required');
然后,將名稱存儲在您的一個(gè)語言文件數(shù)組中(不帶前綴):
$lang['first_name'] = 'First Name';
注意
如果您將數(shù)組項(xiàng)存儲在未由CI自動加載的語言文件中,則需要記住使用以下命令將其加載到控制器中:
$this->lang->load('file_name');
有關(guān)語言文件的更多信息,請參見“語言課程”頁面。
默認(rèn)情況下,F(xiàn)orm Validation類會在每個(gè)顯示的錯(cuò)誤消息的周圍添加一個(gè)段落標(biāo)記(<p>)。您可以全局更改這些分隔符,也可以單獨(dú)更改這些分隔符或更改配置文件中的默認(rèn)值。
全局更改分隔符要在全局更改錯(cuò)誤分隔符,在您的控制器方法中,在加載Form Validation類之后,添加以下代碼:$ this-> form_validation-> set_error_delimiters('<div class =“error”>','</ div >'); 在這個(gè)例子中,我們切換到使用div標(biāo)簽。
單獨(dú)更改分隔符本教程中顯示的兩個(gè)錯(cuò)誤生成函數(shù)中的每一個(gè)都可以提供它們自己的分隔符,如下所示:<?php echo form \ _error('field name','<div class =“error”>','</ DIV>'); ?>或者:<?php echo validation \ _errors('<div class =“error”>','</ div>'); ?>
在配置文件中設(shè)置分隔符您可以在application / config / form_validation.php中添加錯(cuò)誤分隔符,如下所示:$ config'error_prefix'='<div class =“error \ _prefix”>'; $ config'error_suffix'='</ div>';
如果您希望在每個(gè)表單字段旁邊顯示錯(cuò)誤消息,而不是列表,則可以使用該form_error()
功能。
嘗試一下!更改您的表單,使其看起來像這樣:
<h5>Username</h5><?php echo form_error('username'); ?><input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /><h5>Password</h5><?php echo form_error('password'); ?><input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" /><h5>Password Confirm</h5><?php echo form_error('passconf'); ?><input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" /><h5>Email Address</h5><?php echo form_error('email'); ?><input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />
如果沒有錯(cuò)誤,則不會顯示任何內(nèi)容。如果出現(xiàn)錯(cuò)誤,則會顯示消息。
重要
如果使用數(shù)組作為表單域的名稱,則必須將其作為數(shù)組提供給函數(shù)。例:
<?php echo form_error('options[size]'); ?><input type="text" name="options[size]" value="<?php echo set_value("options[size]"); ?>" size="50" />
欲了解更多信息,請參閱下面的使用數(shù)組作為字段名稱部分。
有時(shí)您可能想要驗(yàn)證不是源自$_POST
數(shù)據(jù)的數(shù)組。
在這種情況下,您可以指定要驗(yàn)證的數(shù)組:
$data = array( 'username' => 'johndoe', 'password' => 'mypassword', 'passconf' => 'mypassword');$this->form_validation->set_data($data);
無論您是驗(yàn)證$_POST
數(shù)據(jù)還是選擇其他陣列,創(chuàng)建驗(yàn)證規(guī)則,運(yùn)行驗(yàn)證和檢索錯(cuò)誤消息的工作方式都是相同的。
重要
您必須在定義任何驗(yàn)證規(guī)則之前調(diào)用該set_data()
方法。
重要
如果你想在單個(gè)執(zhí)行過程中驗(yàn)證多個(gè)數(shù)組,那么你應(yīng)該reset_validation()
在設(shè)置規(guī)則和驗(yàn)證新數(shù)組之前調(diào)用該方法。
欲了解更多信息,請參閱下面的類參考部分。
Form Validation類的一個(gè)很好的特性是它允許你將你的整個(gè)應(yīng)用程序的所有驗(yàn)證規(guī)則存儲在配置文件中。您可以將這些規(guī)則組織到“組”中。這些組可以在調(diào)用匹配的控制器/方法時(shí)自動加載,也可以根據(jù)需要手動調(diào)用每個(gè)組。
要存儲您的驗(yàn)證規(guī)則,只需在application / config /文件夾中創(chuàng)建一個(gè)名為form_validation.php的文件即可。在那個(gè)文件中,你將放置一個(gè)名為$ config的數(shù)組和你的規(guī)則。如前所示,驗(yàn)證數(shù)組將具有此原型:
$config = array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required' ), array( 'field' => 'passconf', 'label' => 'Password Confirmation', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'Email', 'rules' => 'required' ));
您的驗(yàn)證規(guī)則文件將自動加載并在您調(diào)用該run()
方法時(shí)使用。
請注意,您必須為您的$config
陣列命名。
為了將您的規(guī)則組織到“集合”中,需要將它們放入“子陣列”中??紤]下面的例子,顯示兩組規(guī)則。我們?nèi)我庹{(diào)用這兩個(gè)規(guī)則“注冊”和“電子郵件”。你可以任意指定你的規(guī)則:
$config = array( 'signup' => array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required' ), array( 'field' => 'passconf', 'label' => 'Password Confirmation', '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' ) ));
為了調(diào)用一個(gè)特定的組,你將把它的名字傳遞給該run()
方法。例如,要調(diào)用注冊規(guī)則,您將執(zhí)行以下操作:
if ($this->form_validation->run('signup') == FALSE){ $this->load->view('myform');}else{ $this->load->view('formsuccess');}
調(diào)用規(guī)則組的另一種(更自動的)方法是根據(jù)您打算使用的控制器類/方法來命名它。例如,假設(shè)您有一個(gè)名為Member的控制器和一個(gè)名為signup的方法。以下是您的班級可能的樣子:
<?phpclass Member extends CI_Controller { public function signup() { $this->load->library('form_validation'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } }}
在您的驗(yàn)證配置文件中,您將為您的規(guī)則組成員/注冊命名:
$config = array( 'member/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' ) ));
當(dāng)一個(gè)規(guī)則組的命名方式與控制器類/方法的命名方式相同時(shí),當(dāng)該run()
方法從該類/方法調(diào)用時(shí),它將自動使用。
Form Validation類支持使用數(shù)組作為字段名稱。考慮這個(gè)例子:
<input type="text" name="options[]" value="" size="50" />
如果您確實(shí)使用數(shù)組作為字段名稱,則必須在幫助器函數(shù)中使用需要字段名稱的EXACT數(shù)組名稱以及您的驗(yàn)證規(guī)則字段名稱。
例如,要為上述字段設(shè)置規(guī)則,您可以使用:
$this->form_validation->set_rules('options[]', 'Options', 'required');
或者,要顯示上述字段的錯(cuò)誤,您可以使用:
<?php echo form_error('options[]'); ?>
或者重新填充您要使用的字段:
<input type="text" name="options[]" value="<?php echo set_value('options[]'); ?>" size="50" />
您也可以使用多維數(shù)組作為字段名稱。例如:
<input type="text" name="options[size]" value="" size="50" />
甚至:
<input type="text" name="sports[nba][basketball]" value="" size="50" />
和我們的第一個(gè)例子一樣,你必須在輔助函數(shù)中使用確切的數(shù)組名稱:
<?php echo form_error('sports[nba][basketball]'); ?>
如果您使用具有多個(gè)選項(xiàng)的復(fù)選框(或其他字段),請不要忘記在每個(gè)選項(xiàng)后留下一個(gè)空括號,以便將所有選擇都添加到POST數(shù)組中:
<input type="checkbox" name="options[]" value="red" /><input type="checkbox" name="options[]" value="blue" /><input type="checkbox" name="options[]" value="green" />
或者,如果您使用多維數(shù)組:
<input type="checkbox" name="options[color][]" value="red" /><input type="checkbox" name="options[color][]" value="blue" /><input type="checkbox" name="options[color][]" value="green" />
當(dāng)你使用輔助函數(shù)時(shí),你也會包含這個(gè)括號:
<?php echo form_error('options[color][]'); ?>
以下是可供使用的所有本機(jī)規(guī)則的列表:
規(guī)則 | 參數(shù) | 描述 | 例 |
---|---|---|---|
需要 | 沒有 | 如果表單元素為空,則返回FALSE。 | |
火柴 | 是 | 如果表單元素與參數(shù)中的表單元素不匹配,則返回FALSE。 | matchesform_item |
regex_match | 是 | 如果表單元素與正則表達(dá)式不匹配,則返回FALSE。 | regex_match /正則表達(dá)式/ |
不同 | 是 | 如果表單元素與參數(shù)中的元素沒有差異,則返回FALSE。 | differsform_item |
是獨(dú)特的 | 是 | 如果表單元素對參數(shù)中的表和字段名稱不唯一,則返回FALSE。注意:此規(guī)則要求啟用查詢生成器才能工作。 | is_uniquetable.field |
MIN_LENGTH | 是 | 如果表單元素比參數(shù)值短,則返回FALSE。 | min_length3 |
最長長度 | 是 | 如果表單元素長于參數(shù)值,則返回FALSE。 | max_length12 |
exact_length | 是 | Returns FALSE if the form element is not exactly the parameter value. | exact_length8 |
greater_than | Yes | Returns FALSE if the form element is less than or equal to the parameter value or not numeric. | greater_than8 |
greater_than_equal_to | Yes | Returns FALSE if the form element is less than the parameter value, or not numeric. | greater_than_equal_to8 |
less_than | Yes | Returns FALSE if the form element is greater than or equal to the parameter value or not numeric. | less_than8 |
less_than_equal_to | Yes | Returns FALSE if the form element is greater than the parameter value, or not numeric. | less_than_equal_to8 |
in_list | Yes | Returns FALSE if the form element is not within a predetermined list. | in_listred,blue,green |
alpha | No | Returns FALSE if the form element contains anything other than alphabetical characters. | |
alpha_numeric | No | 如果表單元素包含除字母數(shù)字字符以外的任何內(nèi)容,則返回FALSE。 | |
alpha_numeric_spaces | 沒有 | 如果表單元素包含除字母數(shù)字字符或空格之外的任何內(nèi)容,則返回FALSE。修剪后應(yīng)使用,以避免在開始或結(jié)束時(shí)出現(xiàn)空格。 | |
alpha_dash | 沒有 | 如果表單元素包含除字母數(shù)字字符,下劃線或破折號之外的任何內(nèi)容,則返回FALSE。 | |
數(shù)字 | 沒有 | 如果表單元素包含數(shù)字字符以外的任何內(nèi)容,則返回FALSE。 | |
整數(shù) | 沒有 | 如果表單元素包含除整數(shù)以外的任何內(nèi)容,則返回FALSE。 | |
十進(jìn)制 | 沒有 | 如果表單元素包含除十進(jìn)制數(shù)以外的任何內(nèi)容,則返回FALSE。 | |
is_natural | 沒有 | 如果表單元素包含除自然數(shù)以外的任何其他值,則返回FALSE:0,1,2,3等 | |
is_natural_no_zero | 沒有 | 如果表單元素包含除自然數(shù)以外的任何值,但不為零,則返回FALSE:1,2,3等 | |
valid_url | 沒有 | 如果表單元素不包含有效的URL,則返回FALSE。 | |
VALID_EMAIL | 沒有 | 如果表單元素不包含有效的電子郵件地址,則返回FALSE。 | |
valid_emails | 沒有 | 如果逗號分隔列表中提供的任何值不是有效的電子郵件,則返回FALSE。 | |
valid_ip | 是 | 如果提供的IP地址無效,則返回FALSE。接受“ipv4”或“ipv6”的可選參數(shù)以指定IP格式。 | |
valid_base64 | 沒有 | 如果提供的字符串包含有效的Base64字符以外的任何內(nèi)容,則返回FALSE。 |
注意
這些規(guī)則也可以稱為離散方法。例如:
$this->form_validation->required($string);
注意
您還可以使用任何允許最多兩個(gè)參數(shù)的本地PHP函數(shù),其中至少需要一個(gè)參數(shù)(以傳遞字段數(shù)據(jù))。
以下是可供使用的所有準(zhǔn)備方法的列表:
Name | 參數(shù) | 描述 |
---|---|---|
prep_for_form | 沒有 | DEPRECATED:轉(zhuǎn)換特殊字符,以便HTML數(shù)據(jù)可以顯示在表單字段中而不會被破壞。 |
prep_url | 沒有 | 如果缺少URL,則添加“http://”。 |
strip_image_tags | 沒有 | 從離開原始URL的圖像標(biāo)簽剝離HTML。 |
encode_php_tags | 沒有 | 將PHP標(biāo)簽轉(zhuǎn)換為實(shí)體。 |
注意
您還可以使用任何PHP函數(shù)允許一個(gè)參數(shù),如trim()
,htmlspecialchars()
,urldecode()
,等。
class CI_Form_validationset_rules($field[, $label = ''[, $rules = ''[, $errors = array()]]])
參數(shù): | $ field(string) - 字段名稱$ label(字符串) - 字段標(biāo)簽$ rules(mixed) - 驗(yàn)證規(guī)則,作為由管道“|”分隔的字符串列表,或者作為數(shù)組或規(guī)則$錯(cuò)誤(數(shù)組)自定義錯(cuò)誤消息列表 |
---|---|
返回: | CI_Form_validation實(shí)例(方法鏈接) |
返回類型: | CI_Form_validation |
$ field(string) - 字段名稱
$ label(字符串) - 字段標(biāo)簽
$ rules(mixed) - 驗(yàn)證規(guī)則,作為由管道“|”分隔的字符串列表,或者作為數(shù)組或規(guī)則
$ errors(array) - 自定義錯(cuò)誤消息的列表
Returns: CI\_Form\_validation instance (method chaining)
Return type: CI\_Form\_validation
允許您設(shè)置驗(yàn)證規(guī)則,如以上教程部分所述:
設(shè)置驗(yàn)證規(guī)則
將一組驗(yàn)證規(guī)則保存到配置文件
run([$group = ''])
參數(shù): | $ group(string) - 要運(yùn)行的驗(yàn)證組的名稱 |
---|---|
返回: | 成功為TRUE,如果驗(yàn)證失敗,則為FALSE |
返回類型: | 布爾 |
$ group(string) - 要運(yùn)行的驗(yàn)證組的名稱
返回:成功時(shí)為TRUE,如果驗(yàn)證失敗,則返回FALSE
Return type: bool
運(yùn)行驗(yàn)證例程。成功時(shí)返回布爾值TRUE,失敗時(shí)返回FALSE。您可以選擇通過方法傳遞驗(yàn)證組的名稱,如下所述:[將驗(yàn)證規(guī)則集保存到配置文件](about:blank#saving-groups)
set_message($lang[, $val = ''])
參數(shù): | $ lang(string) - 消息的規(guī)則是$ val(字符串) - 消息 |
---|---|
返回: | CI_Form_validation實(shí)例(方法鏈接) |
返回類型: | CI_Form_validation |
$ lang(string) - 消息的規(guī)則
$ val(字符串) - 消息
Returns: CI\_Form\_validation instance (method chaining)
Return type: CI\_Form\_validation
允許您設(shè)置自定義錯(cuò)誤消息。參見[設(shè)置錯(cuò)誤消息](關(guān)于:空白#設(shè)置錯(cuò)誤消息)
set_error_delimiters([$prefix = '<p>'[, $suffix = '</p>']])
參數(shù): | $ prefix(string) - 錯(cuò)誤消息前綴$ suffix(string) - 錯(cuò)誤消息后綴 |
---|---|
返回: | CI_Form_validation實(shí)例(方法鏈接) |
返回類型: | CI_Form_validation |
$ prefix(字符串) - 錯(cuò)誤消息前綴
$ suffix(字符串) - 錯(cuò)誤消息后綴
Returns: CI\_Form\_validation instance (method chaining)
Return type: CI\_Form\_validation
設(shè)置錯(cuò)誤消息的默認(rèn)前綴和后綴。
set_data($data)
參數(shù): | $ data(array) - 數(shù)據(jù)驗(yàn)證數(shù)組 |
---|---|
返回: | CI_Form_validation實(shí)例(方法鏈接) |
返回類型: | CI_Form_validation |
$ data(array) - 數(shù)據(jù)驗(yàn)證數(shù)組
Returns: CI\_Form\_validation instance (method chaining)
Return type: CI\_Form\_validation
允許你為驗(yàn)證設(shè)置一個(gè)數(shù)組,而不是使用默認(rèn)的`$ _POST`數(shù)組。
reset_validation()
返回: | CI_Form_validation實(shí)例(方法鏈接) |
---|---|
返回類型: | CI_Form_validation |
error_array()
返回: | 錯(cuò)誤消息數(shù)組 |
---|---|
返回類型: | 排列 |
error_string([$prefix = ''[, $suffix = '']])
參數(shù): | $ prefix(string) - 錯(cuò)誤消息前綴$ suffix(string) - 錯(cuò)誤消息后綴 |
---|---|
返回: | 作為字符串的錯(cuò)誤消息 |
返回類型: | 串 |
$ prefix(字符串) - 錯(cuò)誤消息前綴
$ suffix(字符串) - 錯(cuò)誤消息后綴
Returns: Error messages as a string
Return type: string
返回格式為字符串并由換行符分隔的所有錯(cuò)誤消息(從錯(cuò)誤\ _array()返回)。
error($field[, $prefix = ''[, $suffix = '']])
參數(shù): | $ field(string) - 字段名稱$ prefix(字符串) - 可選前綴$ suffix(字符串) - 可選后綴 |
---|---|
返回: | 錯(cuò)誤消息字符串 |
返回類型: | 串 |
$ field(string) - 字段名稱
$ prefix(字符串) - 可選的前綴
$ suffix(字符串) - 可選后綴
Returns: Error message string
Return type: string
返回特定字段的錯(cuò)誤消息,可選地為其添加前綴和/或后綴(通常為HTML標(biāo)簽)。
has_rule($field)
參數(shù): | $ field(string) - 字段名稱 |
---|---|
返回: | 如果該字段設(shè)置了規(guī)則,則為TRUE,否則為FALSE |
返回類型: | 布爾 |
$ field(string) - 字段名稱
Returns: TRUE if the field has rules set, FALSE if not
Return type: bool
檢查是否有指定字段的規(guī)則集。
請參閱Form Helper手冊以了解以下功能:
form_error()
validation_errors()
set_value()
set_select()
set_checkbox()
set_radio()
請注意,這些是程序性功能,因此它們不要求您預(yù)先安排它們$this->form_validation
。