首页 后端开发 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脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 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)

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

PHP中箭头符号的作用及实践应用 PHP中箭头符号的作用及实践应用 Mar 22, 2024 am 11:30 AM

PHP中箭头符号的作用及实践应用在PHP中,箭头符号(->)通常用于访问对象的属性和方法。对象是PHP中面向对象编程(OOP)的基本概念之一,在实际开发中,箭头符号在操作对象时发挥着重要作用。本文将介绍箭头符号的作用以及实践应用,并提供具体的代码示例来帮助读者更好地理解。一、箭头符号的作用访问对象的属性箭头符号可以用来访问对象的属性。当我们实例化一个对

手机修改wifi密码教程(简单操作) 手机修改wifi密码教程(简单操作) Apr 26, 2024 pm 06:25 PM

无线网络已经成为我们生活中不可或缺的一部分、随着互联网的快速发展。为了保护个人信息和网络安全,定期更改wifi密码是非常重要的、然而。帮助大家更好地保护家庭网络安全,本文将为大家介绍如何利用手机修改wifi密码的详细教程。1.了解wifi密码的重要性wifi密码是保护个人信息和网络安全的道防线,在网络时代、了解其重要性可以更好地理解为什么需要定期修改密码。2.确认手机连接到wifi首先确保手机已连接到要修改密码的wifi网络上,在修改wifi密码之前。3.打开手机设置菜单进入手机的设置菜单、在手

如何在iPhone中撤消从主屏幕中删除 如何在iPhone中撤消从主屏幕中删除 Apr 17, 2024 pm 07:37 PM

从主屏幕中删除了重要内容并试图将其取回?您可以通过多种方式将应用程序图标放回屏幕。我们已经讨论了您可以遵循的所有方法,并将应用程序图标放回主屏幕如何在iPhone中撤消从主屏幕中删除正如我们之前提到的,有几种方法可以在iPhone上恢复此更改。方法1–替换应用程序库中的应用程序图标您可以直接从应用程序库将应用程序图标放置在主屏幕上。第1步–横向滑动以查找应用程序库中的所有应用程序。步骤2–找到您之前删除的应用程序图标。步骤3–只需将应用程序图标从主库拖动到主屏幕上的正确位置即可。这是将应用程序图

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

本文将探讨如何解决密码错误的问题,特别是在处理BitLocker警告时需要小心。当在BitLocker中多次输入错误密码以解锁驱动器时,就会触发这个警告。通常,这个警告出现是因为系统设定了限制错误登录尝试的策略(通常是允许3次登录尝试)。在这种情况下,用户会收到相应的警告信息。完整的警告信息如下:输入的密码不正确,请注意-连续输入错误密码会导致账户被锁定,这是为了保护您的数据安全。如果需要解锁账户,您将需要使用BitLocker恢复密钥。密码不正确,小心BitLocker警告当您登录计算机时收到

Win10密码不满足密码策略要求咋办? 电脑密码不满足策略要求解决办法 Win10密码不满足密码策略要求咋办? 电脑密码不满足策略要求解决办法 Jun 25, 2024 pm 04:59 PM

在Windows10系统中,密码策略是一套安全规则,确保用户设置的密码符合一定的强度和复杂性要求,而系统提示您的密码不满足密码策略要求则通常意味着您的密码没有达到微软设定的复杂度、长度或字符种类的标准,那么这种情况要如何避免呢?用户们可以直接的找到本地计算机策略下的密码策略来进行操作就可以了,下面就一起来看看吧。不符合密码策略规范的解决方法修改密码长度:根据密码策略要求,我们可以尝试增加密码的长度,比如将原来的6位密码改为8位或更长。添加特殊字符:密码策略通常要求包含特殊字符,如@、#、$等。我

win10电脑开机密码忘记了怎么进入系统_win10电脑忘记开机密码的处理方法 win10电脑开机密码忘记了怎么进入系统_win10电脑忘记开机密码的处理方法 Mar 28, 2024 pm 02:35 PM

1、在另一台电脑上下载安装小白一键重装系统工具,插入空u盘制作u盘启动盘,具体的教程可以参照:2、把U盘启动盘插到需要更改密码的电脑重启,按启动热键,一般启动热键是F12、F8、F9、F10、ESC其中一个。接着出现启动界面,选择U盘的选项回车进入。3、选择【1】启动win10x64PE按回车确定。4、选择桌面上的密码修改的工具,双击打开。5、接着出现账户名列表,选中需要更改密码的账户打开。6、点击下方的修改密码命令,输入两次新的密码,然后点击OK,保存更改。7、最后拔掉U盘,重启电脑就可以正常

See all articles