PEAR::HTML_QuickForm与Smarty 的结合应用_PHP
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的结合作为重点来研究。
首先,给大家看看我们的最后效果:
这个例子非常简单,只有一个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中的所有变量打印出来,看看程序是否执行正确。
再看我们的模板,也很简单:
{if $form_data.javascript}
{$form_data.javascript}
{/if}
这两个简单的文件,总共不到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,相信使用之后大家一定不会失望的

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Win11 を使用している場合、管理者のユーザー名とパスワードの入力を要求される場合があるため、この記事ではその対処方法について説明します。方法 1: 1. [Windows ロゴ] をクリックし、[Shift+Restart] を押してセーフ モードに入るか、[スタート] メニューをクリックして [設定] を選択するという方法でセーフ モードに入ります。 「更新とセキュリティ」を選択し、「回復」で「今すぐ再起動する」を選択し、再起動してオプションを入力した後、 - トラブルシューティング - 詳細オプション - 起動設定 -&mdash を選択します。

ワイヤレス ネットワークは、今日のデジタル世界で人々の生活に不可欠な部分となっています。ただし、個人のワイヤレス ネットワークのセキュリティを保護することが特に重要です。強力なパスワードを設定することは、WiFi ネットワークが他人にハッキングされないようにするための鍵となります。ネットワークのセキュリティを確保するために、この記事では、携帯電話を使用してルーターの WiFi パスワードを変更する方法を詳しく紹介します。 1. ルーター管理ページを開く - モバイルブラウザでルーター管理ページを開き、ルーターのデフォルトの IP アドレスを入力します。 2. 管理者のユーザー名とパスワードを入力します - アクセスするには、ログイン ページに正しい管理者のユーザー名とパスワードを入力します。 3. ワイヤレス設定ページに移動します。ルーター管理ページでワイヤレス設定ページを見つけてクリックし、そのページに入ります。 4.現在のWiを見つける

インターネットの急速な発展に伴い、ワイヤレス ネットワークは私たちの生活に欠かせないものになりました。ただし、個人情報とネットワークのセキュリティを保護するために、Wi-Fi パスワードを定期的に変更することが非常に重要です。ホーム ネットワークのセキュリティをより適切に保護するために、この記事では、携帯電話を使用して WiFi パスワードを変更する方法に関する詳細なチュートリアルを紹介します。 1. WiFi パスワードの重要性を理解する WiFi パスワードは、インターネット時代において、個人情報とネットワーク セキュリティを保護するための第一の防御線です。その重要性を理解することで、パスワードを定期的に変更する必要がある理由をよりよく理解できます。 2. 電話機が Wi-Fi に接続されていることを確認します。まず、Wi-Fi パスワードを変更する前に、パスワードを変更する Wi-Fi ネットワークに電話機が接続されていることを確認します。 3. 電話機の設定メニューを開き、電話機の設定メニューに入ります。

PHP における矢印記号の役割と実際の応用 PHP では、通常、オブジェクトのプロパティとメソッドにアクセスするために矢印記号 (->) が使用されます。オブジェクトとは、PHP におけるオブジェクト指向プログラミング (OOP) の基本概念の 1 つで、実際の開発においては、矢印記号がオブジェクトを操作する上で重要な役割を果たします。この記事では、矢印記号の役割と実際の応用例を紹介し、読者の理解を深めるために具体的なコード例を示します。 1. オブジェクトのプロパティにアクセスするための矢印シンボルの役割 矢印シンボルは、オブジェクトのプロパティにアクセスするために使用できます。ペアをインスタンス化するとき

ホーム画面から重要なものを削除してしまい、元に戻そうとしていますか?さまざまな方法でアプリのアイコンを画面に戻すことができます。 iPhoneでホーム画面から削除を元に戻す方法 前述したように、iPhoneでこの変更を復元する方法はいくつかあります。方法 1 – App ライブラリのアプリ アイコンを置き換える App ライブラリから直接ホーム画面にアプリ アイコンを配置できます。ステップ 1 – 横にスワイプして、アプリ ライブラリ内のすべてのアプリを見つけます。ステップ 2 – 前に削除したアプリのアイコンを見つけます。ステップ 3 – アプリのアイコンをメインライブラリからホーム画面上の正しい場所にドラッグするだけです。これが応用図です

この記事では、間違ったパスワードの問題を解決する方法、特に BitLocker の警告に対処する際の注意の必要性について説明します。この警告は、ドライブのロックを解除するために BitLocker に間違ったパスワードを複数回入力するとトリガーされます。通常、この警告は、不正なログイン試行を制限するポリシーがシステムにあるために発生します (通常、ログイン試行は 3 回まで許可されます)。この場合、ユーザーは適切な警告メッセージを受け取ります。完全な警告メッセージは次のとおりです: 入力されたパスワードが間違っています。間違ったパスワードを入力し続けると、アカウントがロックされることに注意してください。これは、データのセキュリティを保護するためです。アカウントのロックを解除する必要がある場合は、BitLocker 回復キーを使用する必要があります。パスワードが間違っています。コンピュータにログインするときに表示される BitLocker 警告に注意してください

1. Xiaobai のワンクリック システム再インストール ツールを別のコンピュータにダウンロードしてインストールし、空の USB ディスクを挿入して USB ブート ディスクを作成します。具体的なチュートリアルについては、次を参照してください: 2. 変更する必要があるコンピュータに USB ブート ディスクを挿入します。再起動するパスワードを入力して、開始ホットキーを押します。通常、起動ホットキーは F12、F8、F9、F10、および ESC のいずれかです。次に、起動インターフェイスが表示され、USB ディスクのオプションを選択し、Enter キーを押してに入ります。 3. [1] を選択して win10x64PE を起動し、Enter キーを押して確認します。 4. デスクトップ上のパスワード変更ツールを選択し、ダブルクリックして開きます。 5. アカウント名のリストが表示されるので、パスワードを変更する必要があるアカウントを選択して開きます。 6. 以下の [パスワードの変更] コマンドをクリックし、新しいパスワードを 2 回入力し、[OK] をクリックして変更を保存します。 7. 最後に、USB フラッシュ ドライブを取り外し、コンピュータを再起動すると、正常に動作します。

ワイヤレス ネットワークは現代社会の人々の生活に不可欠な部分になっています。または、WiFi リストに保存されたパスワードを表示する必要がありますが、WiFi パスワードを忘れることもあります。この問題を解決するためにモバイル ソフトウェアが登場しました。この魔法のツールを簡単にマスターできるように、この記事ではすべての WiFi パスワードのロックをすばやく解除するのに役立つソフトウェアを紹介します。 1. 強力な WiFi パスワード ロック解除ツール - WiFi パスワード ロック解除の素晴らしい世界を探索します。 2. シンプルで使いやすいインターフェイス設計 - 便利で迅速な操作方法 3. 複数のデバイスをサポート - さまざまなデバイスのニーズを満たします 4. 自動的に更新します -常に最新の WiFi パスワードを維持します。 5. 高速 WiFi 接続 - 複数のデバイスの同時接続ニーズに簡単に対応します。
