想更方便的話,你可以使用Factory模式或者自動(dòng)填充的方法來從$_POST里面提取關(guān)鍵字。
class Post { // ... function &autoFill() { $ret =& new Post; foreach($_POST as $key => $value) { $ret->set($key, $value); } return $ret; } }
使用這個(gè)Post類,你可以編輯你的FormHandler::build() 方法,默認(rèn)使用已經(jīng)存在的$_post數(shù)據(jù):
class FormHandler { function build(&$post) { return array( new Labeled(‘First Name’ , new TextInput(‘fname’, $post->get(‘fname’))) ,new Labeled(‘Last Name’ , new TextInput(‘lname’, $post->get(‘lname’))) ,new Labeled(‘Email’ , new TextInput(‘email’, $post->get(‘email’))) ); } }
現(xiàn)在你可以創(chuàng)建一個(gè)php腳本使用FormHandler類來產(chǎn)生HTML表單:
<form action=”formpage.php” method=”post”> <?php 210 The Decorator Pattern $post =& Post::autoFill(); $form = FormHandler::build($post); foreach($form as $widget) { echo $widget->paint(), “<br>\n”; } ?> <input type=”submit” value=”Submit”> </form>
現(xiàn)在,你已經(jīng)擁有了一個(gè)提交給它自身并且能保持posted數(shù)據(jù)的表單處理(form handler) 類。
現(xiàn)在。我們繼續(xù)為表單添加一些驗(yàn)證機(jī)制。方法是編輯另一個(gè)組件裝飾器類來表達(dá)一個(gè)“invalid”狀態(tài)并擴(kuò)展FormHandler類增加一個(gè)validate()方法以處理組件示例數(shù)組。如果組件非法(“invalid”),我們通過一個(gè)“invalid”類將它包裝在<span>元素中。這里是一個(gè)證明這個(gè)目標(biāo)的測(cè)試
class WidgetTestCase extends UnitTestCase { // ... function testInvalid() { $text =& new Invalid( new TextInput(‘email’)); $output = $text->paint(); $this->assertWantedPattern( ‘~^<span class=”invalid”><input[^>]+></span>$~i’, $output); } }
這里是Invalid WidgetDecorator子類: //代碼Here’s the Invalid WidgetDecorator subclass:
class Invalid extends WidgetDecorator { function paint() { return ‘<span class=”invalid”>’.$this->widget->paint().’</span>’; } }
出處:phpchina
責(zé)任編輯:bluehearts
上一頁(yè) php設(shè)計(jì)模式介紹之裝飾器模式 [3] 下一頁(yè) php設(shè)計(jì)模式介紹之裝飾器模式 [5]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|