ZF in ∞ days –> day 5 –> 使用 Form 建立表單
撰寫 WEB 應用程式一定會遇到表單的傳送,不論是 EMAIL 寄送表單,會員註冊,或是結帳頁面,通通都是透過表單 POST 資料到後端,如果是企業應用程式就會遇到更多控制用的表單,並且還會牽扯到修改原先內容,更麻煩的還有驗證的問題,雖然可以利用一些 JS 來驗證表單,但是 SERVER 端還是得在驗證一次。
今天我們就用 ZF 的 Form API 來協助我們輕鬆的建立表單,不但可以快速的產生表單,更可以快速的將讀取的內容塞回表單中,也可以在產生表單的時候加入驗證的動作。
首先我們依照 day1 建立一個 ZF 專案
STEP 1 :
首先在 application 建立一個 Forms 資料夾
接著新增一個 PHP CLASS 取名為 Album 並且繼承 Zend_Form
我們簡單實作一個 CD 專輯控管表單
STEP 2 :
我們將建立四個表單元件,並且一口氣加入 FORM 內
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <?php require_once ('Zend\Form.php'); class Album extends Zend_Form { //類別初始化時執行 public function init() { //設定表單名稱為 album $this->setName ( 'album' ); //建立一個 專輯ID 的 隱藏欄位 (不過在這個範例並沒有太大意義) $id = new Zend_Form_Element_Hidden ( 'id' ); //建立一個 歌手 的文字輸入欄位 $artist = new Zend_Form_Element_Text ( 'artist' ); //設定歌手的欄位名稱,設定為必須填寫的CSS,加入兩個過濾器去除空白字元,並且驗證器設定為必填欄位 $artist->setLabel ( '歌手' )->setRequired ( true )->addFilter ( 'StripTags' )->addFilter ( 'StringTrim' )->addValidator ( 'NotEmpty' ); //建立一個 專輯名稱的文字輸入欄位 $title = new Zend_Form_Element_Text ( 'title' ); //設定專輯名稱的欄位名稱,設定為必須填寫的CSS,加入兩個過濾器去除空白字元,並且驗證器設定為必填欄位 $title->setLabel ( '專輯名稱' )->setRequired ( true )->addFilter ( 'StripTags' )->addFilter ( 'StringTrim' )->addValidator ( 'NotEmpty' ); //建立一個 SUBMIT 按鈕 $submit = new Zend_Form_Element_Submit ( 'submit' ); //設定 SUBMIT 按鈕的ID 為 submitbutton $submit->setAttrib ( 'id', 'submitbutton' ); //最後將上述的四個物件一口氣加入表單內 $this->addElements ( array ($id, $artist, $title, $submit ) ); } } ?>
STEP 3 :
打開 IndexController.php
並且在 IndexAction 增加以下內容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <?php class IndexController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { // action body //載入我們的 FORM 表單 Zend_Loader::loadClass ( "Album", "../application/Forms/" ); //將表單實體化 $form = new Album (); //將表單交給 VIEW 呈現 $this->view->form = $form; //判斷傳入的參數是否為 POST if ($this->getRequest ()->isPost ()) { //將POST資料取回 $formData = $this->getRequest ()->getPost (); //判斷資料是否合法 if ($form->isValid ( $formData )) { //合法就將值顯示在畫面上 $this->view->artist = $form->getValue ( 'artist' ); $this->view->title = $form->getValue ( 'title' ); } else { //不合法就讓使用者重新輸入 $form->populate ( $formData ); } } } }
STEP 4 :
接著打開 views/scripts/index/index.phtml 檔案
先將原本的範本刪除掉,並且輸入以下內容
1 2 3 4 5 <?php echo $this->form ;?> 以下為您輸入的資料<BR/> 歌手名稱:<?php echo $this->artist ; ?><br/> 專輯名稱:<?php echo $this->title ; ?><br/>
STEP 5 :
最後我們在網址列輸入 http://localhost/day5/public/index.php
我們可以得到以下畫面
我們可以先測試看看沒有輸入字串,並且送出,網頁會回應不可以為空值
接著我們測試再輸入欄位輸入帶有空白並且有 HTML 符號的文字
網頁應該會幫我們去掉特殊符號並且拿掉空白
使用 FORM 表單可以快速的協助我們來建立表單工具
並且包含其 CSS 必須要的一些需要的資料,可以說是相當方便。
當 MVC 與 FORM 還有 LAYOUT 都介紹完了,接下來我們就可以實際跑一個比較完整的範例了。
Random Posts
Loading…
相關文章 :









在寫連續劇嗎?一下變好多,都還來不急看~
感覺挺酷的~
@梅干扣肉
因為我們太久沒PO文了
愧疚阿
抓不到zend framework中Form的欄位資料
想請教格主有關zend framework-FORM方面的問題
我在application/views/下建了一個forms的資料匣
然後再建了一個MemberForm.php的form頁面
MemberForm.php頁面裡的程式碼跟格主您Album Form裡的差不多
只是我又分成了login,logout,update三個functions,分別設定不一樣的FORM欄位
在MemberController.php那分別也寫了login,logout,update三個functions
views/scripts/member/資料匣下的login.phtml程式就是
echo $this->form;
以上程式碼都幾乎和格主這裡示範的範例差不多
但這些頁面在我自己新建的project裡跑的時候
Controller裡$this-view裡設定的東西都跑不來
MemberForm.php裡設的欄位也沒辦法顯示
但如果把完全一樣的頁面搬到依格主day1~6已架好的project上去跑的話
(例如:localhost/public/member/login這個網址)
Controller裡$this->view裡的東西就都可以正常顯示
但MemberForm.php裡設的欄位還是一樣跑不出來
不知道是不是zend framework裡還有哪裡的環境參數沒設定到?
還是哪裡有問題?
另外就是當我Form裡的欄位不是寫在初始init()裡
而是另外分別再寫成三個functions的時候,該怎麼讓Controller或VIEW去抓資料?
因為對FORM的運作模式還不是很了解
所以想請格主幫忙一下了,感謝><!!
Larry The Bird was basically very good at aiming at hoops and assisting his team into win. I accomplish often the same thing except my basketball court is in self help. Come browse, an individual could perhaps be trained a challenge or 2.