首頁 後端開發 php教程 PEAR::HTML_QuickForm与Smarty 的结合应用_PHP

PEAR::HTML_QuickForm与Smarty 的结合应用_PHP

Jun 01, 2016 pm 12:31 PM
i 密碼 應用 我們 結合 表單

SMARTY

  Haohappy在《PHP & More》第三期的《PEAR::HTML_QuickForm入门》一文中说过要写QuickForm和Smarty的结合应用,一直没写,今天看到PHPE论坛上有朋友在询问,为自己的懒惰而惭愧。现在补上,希望对大家有点帮助。 在我看来,PEAR::HTML_QuickForm是个非常优秀的表单类库,大大加快了开发速度,我现在的大多数项目都会用到。如果对PEAR::HTML_QuickForm不了解的朋友,建议先看这篇文章。

  本文针对的读者为有较丰富开发经验的PHP程序员,要求读者

1. 熟悉PEAR及其安装和使用;

2. 熟悉HTML_QuickForm;

3. 理解模板的概念,熟悉Smarty模板引擎的使用。

  在《PEAR::HTML_QuickForm入门》的表单的美化输出一节中,提到了用QuickForm自带的Form修饰方法来美化输出。很明显,这种方法显得有点麻烦,而且让程序员来美化网页,有点难为我们了。 现在程序员和设计师的合作最常见的就是通过模板,所以如何把QuickForm和模板引擎相结合,这就是我们需要解决的问题。其实QuickForm可以和多种模板引擎相结合,如ITX, Sigma, Flexy, Smarty等,每种模板都有其优点和缺点,目前Smarty是最通用的模板引擎,所以我们把QuickForm和Smarty的结合作为重点来研究。

  首先,给大家看看我们的最后效果:

PEAR::HTML_QuickForm与Smarty 的结合应用_PHP

  这个例子非常简单,只有一个Form,4个Input,只是用来讲解QuickForm的使用。在实际开发中,我们经常遇到几十个Input的情况。实际上,表单越复杂,就越显出我们传统的处理方式的低效,就越显出QuickForm的强大。这一点,也许大家以后会体会到。

好,开始我们的QuickForm Smarty之旅。

changPwd.php


require_once("includes/config.inc.php");
//构建Smarty对象
$smarty = new Smarty_App;
$smarty->assign('CSSDIR','./templates/admin');
$smarty->assign('title',':: Haohappy Test网站管理系统 ::');

//构建登录表单
$form = new HTML_QuickForm('frmChgPwd', 'post');

//增加表单元素
$form->addElement('password', 'adminPwd', '','class = NameAndPwd');
$form->addElement('password', 'newPwd', '','class = NameAndPwd');
$form->addElement('password', 'newPwd2', '','class = NameAndPwd');
$form->addElement('submit', 'btnSubmit', '修改密码','class = btnSubmit');

//增加验证规则 会自动生成javascript变量,存入javascript验证函数
$form->addRule('adminPwd','密码不能为空!', 'required','','client');
$form->addRule('newPwd','新密码不能为空!', 'required','','client');
$form->addRule('newPwd2','新密码不能为空!', 'required','','client');
$form->addRule(array('newPwd','newPwd2'),"两次输入的密码不同!!",'compare','','client');

if ($form->validate()) {
//如果表单数据正确,修改密码
$form->process('changePwd');
}
else{

//否则显示表单

// 建立renderer对象
$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty );

// build the HTML for the form 生成表单的HTML代码
$form->accept($renderer);

//assign array with form data 分配表单数据到数组中
$smarty->assign('form_data', $renderer->toArray());
$smarty->catching = false;

// 调试
//echo "

";var_dump($renderer->toArray());echo "
登入後複製
登入後複製
";
$smarty->display("changePwd.tpl");

}

//修改密码
function changePwd(){}
?>

  在代码中,我们用$form->addElement()增添了4个表单元素,用$form->addRule()增加了4条验证规则。怎么样,是不是很快捷方便? 以验证两个密码是否相同的验证规则为例,如果我们自己写验证规则,虽然快,但是代码就会显得臃肿和凌乱,由QuickForm来负责数据验证,开发速度大大提高,而且代码显得很简洁漂亮。仅用了一行代码:

$form->addRule(array('newPwd','newPwd2'),"两次输入的密码不同!!",'compare','','client');

  关于QuickForm的好处,请参看《PEAR::HTML_QuickForm入门》,在此不再重复。

  下面这行代码就是我们将HTML_QuickForm与Smarty连接的桥梁:

$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty );

  所谓renderer,就是用来负责显示的,这里我们把QuickForm的renderer指定为Smarty,我们就可以使用强大的Smarty模板引擎来格式化QuickForm的输出了。

  其它:

changePwd()是这个文件的核心操作函数,用来修改密码。

$form->process('changePwd'); //这行代码用来调用changePwd()


//echo "

";var_dump($renderer->toArray());echo "
登入後複製
登入後複製
";

  这一行用来调试,我们随时可以把$renderer中的所有变量打印出来,看看程序是否执行正确。

  再看我们的模板,也很简单:

changePwd.tpl

{if $form_data.javascript}

{$form_data.javascript}

{/if}

 

 

 

修改管理员密码
现有管理员密码

{$form_data.adminPwd.html}
新密码

{$form_data.newPwd.html}
再次输入新密码

{$form_data.newPwd2.html}

{$form_data.btnSubmit.html}

  这两个简单的文件,总共不到100行代码,就完成了我们在文章开头的效果。包含完整的表单数据验证,处理过程。

  另:使用QuickForm,可以很方便地实现显示层和逻辑层的分离,因为处理的函数是完全独立出来的。

  例如说可以把

if ($form->validate()) {
//如果表单数据正确,修改密码
$form->process('changePwd');
}

改装成

if ($form->validate()) {

switch ($post_vars['action']) {

default:

case "changPwd":

$form->process('changePwd');

break;

case "Add":

$form->process('add');

break;

case "Update":

$form->process('update');

break;

case "Delete":

$form->process('delete');

break;

}

  然后把changePwd,add,update,delete四个函数独立到某个文件当中。这样就可以根据页面提交的action来调用不同的操作。

  这个想法相对比较简陋一些,如果你要用更强大的功能,还可以试试

  PEAR::HTML_QuickForm_Controller。HTML_QuickForm_Controller基于PageController设计模式,也就是用单个页面来处理通过GET和POST传递而来的request和 action。这是个非常有意思的想法,但是这种开发模式不适合于新手,因为相对比较复杂。其作者也说:

HTML_QuickForm_Controller is not intended for PHP newbies. If you don't understand what classes are, if you have no prior experience with QuickForm, if you are a fan of copy-paste programming then this package is not for you.

The package is indeed complex, but so are the problems it is trying to solve. Try to rewrite any of the enclosed multipage form examples without using such a package and you'll see what we mean.

  这部份暂不讨论,这需要大家对MVC有一定了解,下次有机会再另写文章。我自己目前的开发框架就是个MVC框架,觉得很顺手,显示部份就是交给Smarty QuickForm来完成。希望有更多人关注和使用QuickForm,相信使用之后大家一定不会失望的

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
win11提示若要繼續,請輸入管理員使用者名稱和密碼怎麼解決? win11提示若要繼續,請輸入管理員使用者名稱和密碼怎麼解決? Apr 11, 2024 am 09:10 AM

當使用Win11系統時,有時會遇到需要輸入管理員使用者名稱和密碼的提示,本文將探討在遇到這種情況時應該如何處理。方法一:1、點選【Windows標誌】,然後按【Shift+重啟】進入安全模式;或這樣進入安全模式:點選開始選單,選擇設定。選擇「更新與安全」;選擇「恢復」中的「立即重新啟動」;重新啟動進入選項後選擇-疑難排解-進階選項-啟動設定—&mdash

如何使用手機設定路由器WiFi密碼(以手機為工具) 如何使用手機設定路由器WiFi密碼(以手機為工具) Apr 24, 2024 pm 06:04 PM

無線網路已成為人們生活中不可或缺的一部分、在當今數位化的世界中。保護個人無線網路的安全性卻顯得格外重要、然而。設定強密碼是確保你的WiFi網路不會被他人入侵的關鍵。保障你的網路安全,本文將詳細介紹如何使用手機修改路由器WiFi密碼。 1.開啟路由器管理頁面-在手機瀏覽器中開啟路由器管理頁面、透過輸入路由器的預設IP位址。 2.輸入管理員使用者名稱和密碼-以獲得存取權限,在登入頁面中輸入正確的管理員使用者名稱和密碼。 3.導覽至無線設定頁面-尋找並點選進入無線設定頁面,在路由器管理頁面中。 4.找到當前Wi

密碼不正確,小心BitLocker警告 密碼不正確,小心BitLocker警告 Mar 26, 2024 am 09:41 AM

本文將探討如何解決密碼錯誤的問題,特別是在處理BitLocker警告時需要小心。當在BitLocker中多次輸入錯誤密碼以解鎖磁碟機時,就會觸發這個警告。通常,這個警告出現是因為系統設定了限制錯誤登入嘗試的策略(通常是允許3次登入嘗試)。在這種情況下,使用者會收到相應的警告訊息。完整的警告訊息如下:輸入的密碼不正確,請注意-連續輸入錯誤密碼會導致帳戶被鎖定,這是為了保護您的資料安全。如果需要解鎖帳戶,您將需要使用BitLocker恢復金鑰。密碼不正確,小心BitLocker警告當您登入電腦時收到

如何在iPhone中撤銷從主畫面中刪除 如何在iPhone中撤銷從主畫面中刪除 Apr 17, 2024 pm 07:37 PM

從主畫面中刪除了重要內容並試圖將其取回?您可以透過多種方式將應用程式圖示放回螢幕。我們已經討論了您可以遵循的所有方法,並將應用程式圖示放回主畫面如何在iPhone中撤消從主畫面中刪除正如我們之前提到的,有幾種方法可以在iPhone上恢復此變更。方法1–替換應用程式庫中的應用程式圖示您可以直接從應用程式庫將應用程式圖示放置在主畫面上。步驟1–橫向滑動以尋找應用程式庫中的所有應用程式。步驟2–找到您先前刪除的應用程式圖示。步驟3–只需將應用程式圖示從主庫拖曳到主畫面上的正確位置即可。這是將應用程式圖

PHP中箭頭符號的作用及實作應用 PHP中箭頭符號的作用及實作應用 Mar 22, 2024 am 11:30 AM

PHP中箭頭符號的作用及實踐應用在PHP中,箭頭符號(-&gt;)通常用於存取物件的屬性和方法。物件是PHP中物件導向程式設計(OOP)的基本概念之一,在實際開發中,箭頭符號在操作物件時發揮重要作用。本文將介紹箭頭符號的作用以及實踐應用,並提供具體的程式碼範例來幫助讀者更好地理解。一、箭頭符號的作用存取物件的屬性箭頭符號可以用來存取物件的屬性。當我們實例化一個對

手機修改wifi密碼教學(簡單操作) 手機修改wifi密碼教學(簡單操作) Apr 26, 2024 pm 06:25 PM

無線網路已成為我們生活中不可或缺的一部分、隨著網路的快速發展。為了保護個人資訊和網路安全,定期更改wifi密碼是非常重要的、然而。幫助大家更能保護家庭網路安全,本文將為大家介紹如何利用手機修改wifi密碼的詳細教學。 1.了解wifi密碼的重要性wifi密碼是保護個人資訊和網路安全的道防線,在網路時代、了解其重要性可以更好地理解為什麼需要定期修改密碼。 2.確認手機連接到wifi首先確保手機已連接到要修改密碼的wifi網路上,在修改wifi密碼之前。 3.開啟手機設定選單進入手機的設定選單、在手

從入門到精通:探索Linux tee命令的各種應用場景 從入門到精通:探索Linux tee命令的各種應用場景 Mar 20, 2024 am 10:00 AM

Linuxtee命令是一個非常有用的命令列工具,它可以在不影響已有輸出的情況下,將輸出寫入檔案或將輸出送到另一個命令。在本文中,我們將深入探索Linuxtee命令的各種應用場景,從入門到精通。 1.基本用法首先,我們來看看tee指令的基本用法。 tee指令的語法如下:tee[OPTION]...[FILE]...該指令會從標準輸入讀取數據,並將數據

如何為excel設定密碼 如何為excel設定密碼 Mar 21, 2024 am 09:00 AM

前幾天表弟找我訴苦說用excel辛苦做了一大堆數據,結果後來被同事給修改了,當時不知道情況,發給老闆後被臭罵了一頓。這確實挺讓人無奈的,有的人就是看你不順眼,就是想故意整你,離開學校步入社會以後,你會發現背後捅刀子的人越來越多。除了安慰表弟幾句以外,我還給了表弟一個意見,如果怕以後再遇到這樣的事情,那就把excel表格設定密碼,除了你可以打開以外,別人誰都打不開。廣大網友們,如果你也怕自己的excel表格被別人偷偷修改,也該設定密碼的。 excel密碼表格如何設定密碼?跟我一起來了解一下吧! 1.

See all articles