10天學會phpWeChat——第八天:Form類,豐富表單提交的字段類型


通過前面七講的系列教程,我們完成了一個包含后台並自適應PC+h5移動端的文章管理模塊。

在實際的生產環境中,文章投稿、商品上傳等操作並不會簡單局限於一個text和textarea組成的表單。在實際中,我們可能會用到web富文本編輯器(如ueditor、markdown)、圖片上傳、多圖上傳、附件上傳、地圖標注等更加豐富的表單類型。

今天,我們開始《10天學會phpWeChat》的第八講:Form類,豐富表單提交的字段類型。

一、什么是Form類?

Form類是phpWeChat封裝好的一個類,它的方法集成了常見的表單字段類型包括:富文本編輯器、時間日期、多圖上傳、附件上傳、視頻上傳、地圖標注等。

二、怎么使用Form類?

1、由於phpWeChat采用了命名空間的機制,所以每次在視圖模板里需要調用Form類時,請在視圖模板頭部加上

1 <?php use phpWeChat\Form;?>

來聲明下Form所處的命名空間才能使用。

2、由於Form類的具體實現需要借助jQuery類,所以所以每次在視圖模板里需要調用Form類時,請在視圖模板頭部加上以下Js代碼:

1 <script language="javascript" type="text/javascript">
2    var PW_PATH='{__PW_PATH__}';
3 </script>
4 <script src="{__PW_PATH__}statics/jquery/jquery-1.12.2.min.js" language="javascript"></script>
5 <script src="{__PW_PATH__}statics/core.js" language="javascript"></script>

3、要給指定表單form加一個ID並最好加上enctype="multipart/form-data"屬性。

4、指定form的提交按鈕不能用submit類型,要更換為button。並增加一個onclick事件,如:

<input type="button" onClick="doSubmit('tougaoform','{U('hello','tougaosave')}')" value="投稿" />

其中,doSubmit('tougaoform','{U('hello','tougaosave')}') 的作用是指定ID為tougaoform的表單的action為{U('hello','tougaosave')},並提交表單。

三、實例

以上的大道理講完了,接下來,我們還以hello world模塊的文章投稿功能為例,來實際展示今天的話題。

文章投稿的視圖文件為tougao.html,我們按照以上兩點加入指定代碼,如下面代碼所示:

{php use phpWeChat\Form;}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="javascript" type="text/javascript">
   var PW_PATH='{__PW_PATH__}';
</script>
<script src="{__PW_PATH__}statics/jquery/jquery-1.12.2.min.js" language="javascript"></script>
<script src="{__PW_PATH__}statics/core.js" language="javascript"></script>
<title>投稿</title>
</head>

<body>
<form action="{U('hello','tougaosave')}" method="post" name="tougaoform" id="tougaoform"  enctype="multipart/form-data">
    標題:<input type="text" name="info[title]" size="36" />
    <br />
    內容:<textarea name="info[content]" cols="55" rows="5"></textarea>
    <br />
    百度編輯器:{Form::baiduEditor('info','content2','請輸入您的內容')}
    <input type="button" onClick="doSubmit('tougaoform','{U('hello','tougaosave')}')" value="投稿" />
</form>
</body>
</html>

如同代碼所示,我們在視圖文件的第一行加入了聲明命名空間的

{php use phpWeChat\Form;}

和在<head></head>之間加入了加載jQuery的Js代碼:

<script language="javascript" type="text/javascript">
var PW_PATH='{__PW_PATH__}';
</script>
<script src="{__PW_PATH__}statics/jquery/jquery-1.12.2.min.js" language="javascript"></script>
<script src="{__PW_PATH__}statics/core.js" language="javascript"></script>

同時,我們在body里加入了一個Form的方法調用:

百度編輯器:{Form::baiduEditor('info','content2','請輸入您的內容')}

此時,我們訪問投稿頁面,則出現了如下視圖效果:

如上圖所示,出現了一個富文本編輯器。而這一切,我們只用了一行代碼:{Form::baiduEditor('info','content2','請輸入您的內容')}就搞定了。

為了便於查看效果,我們適當修改下hello world模塊的前端控制器(index.php)的tougaosave分支,讓其打印出表單提交后的變量:

 1 <?php
 2     //自適應模塊的PC前端控制器
 3     use wechat\hello\hello;
 4     use phpWeChat\Area;
 5     use phpWeChat\CaChe;
 6     use phpWeChat\Config;
 7     use phpWeChat\Member;
 8     use phpWeChat\Module;
 9     use phpWeChat\MySql;
10     use phpWeChat\Order;
11     use phpWeChat\Upload;
12 
13     !defined('IN_APP') && exit('Access Denied!');
14 
15     switch($action)
16     {
17         case 'index':
18             //從數據表讀取數據並賦給數組$data
19             //$data=Hello::dataList();
20             echo '這是自適應模塊的PC端前端控制器';
21             exit();
22             break;
23         case 'detail':
24             $data=Hello::dataGet($id); //$id 可以改成$_GET['id']
25             break;
26         case 'tougao':
27 
28             break;
29         case 'tougaosave':
30             print_r($info);
31             exit();
32             /*
33             $op=Hello::dataInsert($info);
34 
35             if($op)
36             {
37                 echo '文章投稿成功,ID為'.$op;
38             }
39             else
40             {
41                 echo '文章投稿失敗';
42             }
43             exit();
44             */
45             break;
46         //以下 case 條件僅為 示例。您可以根據業務邏輯自由修改和拓展
47 
48         //case 'index':
49 
50             //在此寫 index.php?m=hello&a=index 時的邏輯
51 
52             //break;
53 
54         //case 'list':
55 
56             //在此寫 index.php?m=hello&a=list 時的邏輯
57 
58             //break;
59 
60         //以此類推...
61 
62         //case '...':
63 
64             //在此寫 index.php?m=hello&a=... 時的邏輯
65 
66             //break;
67 
68         default:
69             break;
70     }
71 ?>

點擊提交按鈕,出現如下圖所示的效果:

如上圖所示,我們不僅在前端展示出來了富文本編輯器,而且還在提交后,在服務端接收到了富文本編輯器的值,從而我們就可以進行數據庫更新操作了。

四、Form類方法的調用參數

在上面的示例中,我們通過一個富文本編輯器的調用實例來展示了Form類的作用。以下是它各個參數的說明(文檔參考:http://wiki.phpwechat.com/4):

Form::方法名('表單數組名稱','字段名稱','默認值')。

五、更多實例參考

1、單圖上傳

視圖模板代碼(tougao.html):

 1 {php use phpWeChat\Form;}
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6 <script language="javascript" type="text/javascript">
 7    var PW_PATH='{__PW_PATH__}';
 8 </script>
 9 <script src="{__PW_PATH__}statics/jquery/jquery-1.12.2.min.js" language="javascript"></script>
10 <script src="{__PW_PATH__}statics/core.js" language="javascript"></script>
11 <title>投稿</title>
12 </head>
13 
14 <body>
15 <form action="{U('hello','tougaosave')}" method="post" name="tougaoform" id="tougaoform"  enctype="multipart/form-data">
16     標題:<input type="text" name="info[title]" size="36" />
17     <br />
18     內容:<textarea name="info[content]" cols="55" rows="5"></textarea>
19     <br />
20     百度編輯器:{Form::baiduEditor('info','content2','請輸入您的內容')}
21     <br />
22     單圖上傳:{Form::image('info','pic','')}
23     <input type="button" onClick="doSubmit('tougaoform','{U('hello','tougaosave')}')" value="投稿" />
24 </form>
25 </body>
26 </html>

 

效果:

提交后接收變量:

如上圖,我們接收到了單圖上傳的值。

2、多圖上傳

 1 {php use phpWeChat\Form;}
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6 <script language="javascript" type="text/javascript">
 7    var PW_PATH='{__PW_PATH__}';
 8 </script>
 9 <script src="{__PW_PATH__}statics/jquery/jquery-1.12.2.min.js" language="javascript"></script>
10 <script src="{__PW_PATH__}statics/core.js" language="javascript"></script>
11 <title>投稿</title>
12 </head>
13 
14 <body>
15 <form action="{U('hello','tougaosave')}" method="post" name="tougaoform" id="tougaoform"  enctype="multipart/form-data">
16     標題:<input type="text" name="info[title]" size="36" />
17     <br />
18     內容:<textarea name="info[content]" cols="55" rows="5"></textarea>
19     <br />
20     百度編輯器:{Form::baiduEditor('info','content2','請輸入您的內容')}
21     <br />
22     單圖上傳:{Form::image('info','pic','')}
23     <br />
24     多圖上傳:{Form::images('info','pics','')}
25     <input type="button" onClick="doSubmit('tougaoform','{U('hello','tougaosave')}')" value="投稿" />
26 </form>
27 </body>
28 </html>

效果:

小貼士:如同http://wiki.phpwechat.com/4文檔中指明的一樣,由於多圖上傳是一個復雜的過程,提交后需要用  deformat_focus_img() 函數進行處理成可以存儲的字符串。其他字段類型無需處理。

在控制器中,我們加上多圖的轉碼:

 1 <?php
 2     //自適應模塊的PC前端控制器
 3     use wechat\hello\hello;
 4     use phpWeChat\Area;
 5     use phpWeChat\CaChe;
 6     use phpWeChat\Config;
 7     use phpWeChat\Member;
 8     use phpWeChat\Module;
 9     use phpWeChat\MySql;
10     use phpWeChat\Order;
11     use phpWeChat\Upload;
12 
13     !defined('IN_APP') && exit('Access Denied!');
14 
15     switch($action)
16     {
17         case 'index':
18             //從數據表讀取數據並賦給數組$data
19             //$data=Hello::dataList();
20             echo '這是自適應模塊的PC端前端控制器';
21             exit();
22             break;
23         case 'detail':
24             $data=Hello::dataGet($id); //$id 可以改成$_GET['id']
25             break;
26         case 'tougao':
27 
28             break;
29         case 'tougaosave':
30             $info['pics']=deformat_focus_img('pics'); //多圖上傳的特殊處理,其他類型不需要
31 
32             print_r($info);
33             exit();
34             /*
35             $op=Hello::dataInsert($info);
36 
37             if($op)
38             {
39                 echo '文章投稿成功,ID為'.$op;
40             }
41             else
42             {
43                 echo '文章投稿失敗';
44             }
45             exit();
46             */
47             break;
48         //以下 case 條件僅為 示例。您可以根據業務邏輯自由修改和拓展
49 
50         //case 'index':
51 
52             //在此寫 index.php?m=hello&a=index 時的邏輯
53 
54             //break;
55 
56         //case 'list':
57 
58             //在此寫 index.php?m=hello&a=list 時的邏輯
59 
60             //break;
61 
62         //以此類推...
63 
64         //case '...':
65 
66             //在此寫 index.php?m=hello&a=... 時的邏輯
67 
68             //break;
69 
70         default:
71             break;
72     }
73 ?>

接收效果:

如圖所示,我們接收到了多圖上傳的值。

3、日期控件

視圖:

 1 {php use phpWeChat\Form;}
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6 <script language="javascript" type="text/javascript">
 7    var PW_PATH='{__PW_PATH__}';
 8 </script>
 9 <script src="{__PW_PATH__}statics/jquery/jquery-1.12.2.min.js" language="javascript"></script>
10 <script src="{__PW_PATH__}statics/core.js" language="javascript"></script>
11 <title>投稿</title>
12 </head>
13 
14 <body>
15 <form action="{U('hello','tougaosave')}" method="post" name="tougaoform" id="tougaoform"  enctype="multipart/form-data">
16     標題:<input type="text" name="info[title]" size="36" />
17     <br />
18     內容:<textarea name="info[content]" cols="55" rows="5"></textarea>
19     <br />
20     百度編輯器:{Form::baiduEditor('info','content2','請輸入您的內容')}
21     <br />
22     單圖上傳:{Form::image('info','pic','')}
23     <br />
24     多圖上傳:{Form::images('info','pics','')}
25     <br />
26     日期時間:{Form::dateWithTime('info','posttime','')}   
27     <input type="button" onClick="doSubmit('tougaoform','{U('hello','tougaosave')}')" value="投稿" />
28 </form>
29 </body>
30 </html>

接收:

更多示例,請參考http://wiki.phpwechat.com/4,里面涵蓋了9 種拓展的字段類型,基本涵蓋了大部分的業務場景。

 

《10天學會phpWeChat》系列教程傳送門:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM