如果對於我們PHP的愛好者來說,最大的希望就是能讓PHP更加勝任大系統的架構.
直到有一天,企業級的解決方案都會考慮選擇的PHP的框架體系.
然而,我們不得不承認,PHP先天的腳本屬性使得這樣的理想比較奢侈.但是,努力一定會有所收獲.
PEAR::Html_QuickForm
這個公共包讓我們的代碼更加純潔,不再是Html和腳本稀裡糊塗的攪在一起.然而他更大的功能我們非常有必要去發掘.
毫無疑問,他的直接功能就是快速構建Form.
1.構建
代碼1:
require_once("Html/QuickForm.PHP");
//建立一個表單對象,表單名,表單提交方式
$form = new Html_QuickForm('fmJyxx','post');
//表單增加一個標題
$form->addElement('header', 'title','標題');
//表單增加一個select控件,名稱叫做fIEld1,Label為字段1,下拉列表有兩個可選值s1和s2,Value對應"1"和"2"
$form->addElement('select', 'fIEld1', '字段1:',array("1"=>"s1","2"=>"s2"));
//表單增加一個Text控件.
$form->addElement('text', 'fIEld2', '字段2:');
//以上的通過增加的Element根據默認的模板為上下排列,下面我們把兩個按鈕排列成一行添加進去
$group[] =& Html_QuickForm::createElement('submit', 'tj', '提交');
$group[] =& Html_QuickForm::createElement('reset', 'cz', '重置');
$form->addGroup($group, 'buttons', '功能按鈕:', ' ');
通過上面的代碼我們的表單就構造好了,通過$form->display().就顯示了出來,看我們的PHP慢慢的把Html標簽從我們的Coding中淡化了,我們象寫Java,C++代碼一樣專注於邏輯的編寫,而不是標簽的[排列了.
QuickForm還提供了對控件數據的驗證功能,驗證的規則很豐富,也可以支持擴展,例如你要求字段2必錄,
$form->addRule("field2","字段2 不能為空",'required','','clIEnt');
參數分別為:要求的控件名,驗證不通過的提示信息,規則名稱(此為比錄),clIEnt表示可以把規則轉化為客戶端的Javascript代碼.
例如有一個字段3,你需要對該字段有自己的特殊規則,可以這麼做:
注冊一個規則
$form->registerRule('ckdate','function','mycheckdate');
參數:規則名稱,規則驗證方式為函數,函數名稱mycheckdate
那麼你只要定義mycheckdate函數就可以了,系統會自動傳遞字段3的值作為該函數的參數,象這樣
function mycheckdate($val){
}
返回true或false表示你對該值的驗證結果.
2.使用
上面我們把構建一個Form的方法了解了,但是構建完之後我們如何來控制這些控件.
QuickForm是一個體系,提供了HTML_QuickForm_Element類他是所有控件的基類,通過繼承這個基類,我們有所有支持的控件的具體類,比如Html_QuickForm_Select.每個具象類都有自己不同的屬性和不同的操作方法,比如Text只需要getValue和setValue,而Select卻需要有對Options的控制,如addOption函數.
在完成上述代碼之後,我們可以這樣來控制某個控件
$elem = $form->getElement("elementname");
得到的$elem就是對名稱為"elementname"的控件的引用指針,通過這個指針,你可以對該具體類的屬性進行存取.每個控件都有自己對應的類,相信信息請參考Pear's Manual的Html_QuickForm部分.
(注:我在嘗試這一部分的時候,遇到失靈的現象,還盼早日知道詳情.)
3.和身份驗證一起使用
我們常用的身份驗證需要一個包含輸入用戶名和密碼的Form,而這個Form可以由QuickForm構建,而認證方式可以通過另外一個Pear的package--Auth來完成.
代碼2:
//構建用戶名和密碼的Form代碼就采用上述的QuickForm構建,包含在函數show_form中,在此省略
//...........
//該驗證方式基於數據庫驗證,在下面的例子中,數據庫為本地的MySQL下的mydb,
//創建的關系表為Auth,裡面的字段為username和passWord,密碼加密方法為"none"表示密碼沒有加密
require_once("AUTH/AUTH.PHP");
//連接參數
$options = array(
"dsn" => "MySQL://caoxh:jiziba@localhost/mydb",
"table" => "auth",
"usernamecol" => "username", //用戶名字段
"passwordcol" => "passWord", //口令字段
"cryptType" => "none", //口令加密方式,明文驗證則'none'
);
//全局的認證變量
$au = new Auth('DB',$options,'show_form');
$au->setExpire(10);
$auth->start();
if(!$auth->getAuth()){
exit('system deny the user!');
}
Auth會把Form顯示出來並進行認證,把$au作為全局變量,你從此就可以通過$au的方法來判斷認證信息.