今天我們開始進入《10天學會phpWeChat》系列教程的第二天:創建我的第一個hello world! 功能模塊。
1、登錄后台,進入 系統設置——自定義模塊,如圖:
自定義模塊參數說明:
上級模塊:上級模塊一共三個選項:會員member (一般很少會在其下面建立模塊)、pc電腦端(建立Pc訪問的官網、單頁、商城模塊等)、wechat微信公共號端(建立微信公共號端訪問的微官網、微資訊、微商城等)
這里我們可以根據實際需求選擇,此處示例我們選擇wechat。
模塊名稱:模塊的中文名稱,命名沒特殊限制。此處我們命名為hello world。
模塊文件夾:模塊的目錄名稱,命名要求由2-32位英文、數字組成,不能含有其他字符。此處我們命名為hello。
如果上級模塊選擇wechat 將在 addons/wechat/addons/下自動創建相同名稱的目錄;
如果上級模塊選擇pc 將在 addons/pc/addons/下自動創建相同名稱的目錄;
如果上級模塊選擇member 將在 addons/member /addons/下自動創建相同名稱的目錄。
由於我們第一步選擇的是wechat ,所以點擊提交后會在addons/wechat/addons/下自動創建名稱為hello的目錄
管理菜單:此處的作用是為了指定后台管理控制器的方法。
點擊提交,提示自定義模塊創建成功。
2、編寫前端控制器。
如上圖所示,模塊創建成功后,自動進到模塊管理列表頁面,我們點擊“復制模塊鏈接URL”,然后在瀏覽器粘貼這個URL(http://www.example.com/index.php?m=hello&a=index)訪問。系統提示:模板不存在的錯誤,如下圖所示:
這是因為我們還沒有創建視圖和編寫控制器邏輯。
進入 addons/wechat/addons/hello 目錄,如下圖所示:
所有初始模塊的目錄結構都是相同的,其中:
admin目錄是存儲后台管理操作控制器和視圖的目錄;
include目錄是存儲模型操作類文件(xxx.class.php文件)和模塊輔助函數文件(xxx.func.php)的目錄;
index.php是前端訪問控制器。
我們首先打開index.php是前端訪問控制器文件。
1 <?php 2 use wechat\hello\hello; 3 use phpWeChat\Area; 4 use phpWeChat\CaChe; 5 use phpWeChat\Config; 6 use phpWeChat\Member; 7 use phpWeChat\Module; 8 use phpWeChat\MySql; 9 use phpWeChat\Order; 10 use phpWeChat\Upload; 11 12 !defined('IN_APP') && exit('Access Denied!'); 13 14 switch($action) 15 { 16 //以下 case 條件僅為 示例。您可以根據業務邏輯自由修改和拓展 17 18 //case 'index': 19 20 //在此寫 index.php?m=hello&a=index 時的邏輯 21 22 //break; 23 24 //case 'list': 25 26 //在此寫 index.php?m=hello&a=list 時的邏輯 27 28 //break; 29 30 //以此類推... 31 32 //case '...': 33 34 //在此寫 index.php?m=hello&a=... 時的邏輯 35 36 //break; 37 38 default: 39 break; 40 } 41 ?>
根據訪問URL(http://www.example.com/index.php?m=hello&a=index )的參數a 我們得出這個URL請求的是控制器的index路由。因此我們在index.php編寫此路由代碼:
1 <?php 2 use wechat\hello\hello; 3 use phpWeChat\Area; 4 use phpWeChat\CaChe; 5 use phpWeChat\Config; 6 use phpWeChat\Member; 7 use phpWeChat\Module; 8 use phpWeChat\MySql; 9 use phpWeChat\Order; 10 use phpWeChat\Upload; 11 12 !defined('IN_APP') && exit('Access Denied!'); 13 14 switch($action) 15 { 16 case 'index': 17 exit('hello world!'); 18 break; 19 //以下 case 條件僅為 示例。您可以根據業務邏輯自由修改和拓展 20 21 //case 'index': 22 23 //在此寫 index.php?m=hello&a=index 時的邏輯 24 25 //break; 26 27 //case 'list': 28 29 //在此寫 index.php?m=hello&a=list 時的邏輯 30 31 //break; 32 33 //以此類推... 34 35 //case '...': 36 37 //在此寫 index.php?m=hello&a=... 時的邏輯 38 39 //break; 40 41 default: 42 break; 43 } 44 ?>
然后再次訪問該URL,則出現了 hello world的文字。如圖:
3、編寫前端視圖。
由於在 index 路由代碼中,我們使用了exit,所以程序直接輸出了hello world字符串,如果改成echo 這種非中斷的輸出,
1 <?php 2 use wechat\hello\hello; 3 use phpWeChat\Area; 4 use phpWeChat\CaChe; 5 use phpWeChat\Config; 6 use phpWeChat\Member; 7 use phpWeChat\Module; 8 use phpWeChat\MySql; 9 use phpWeChat\Order; 10 use phpWeChat\Upload; 11 12 !defined('IN_APP') && exit('Access Denied!'); 13 14 switch($action) 15 { 16 case 'index': 17 echo 'hello world!'; 18 break; 19 //以下 case 條件僅為 示例。您可以根據業務邏輯自由修改和拓展 20 21 //case 'index': 22 23 //在此寫 index.php?m=hello&a=index 時的邏輯 24 25 //break; 26 27 //case 'list': 28 29 //在此寫 index.php?m=hello&a=list 時的邏輯 30 31 //break; 32 33 //以此類推... 34 35 //case '...': 36 37 //在此寫 index.php?m=hello&a=... 時的邏輯 38 39 //break; 40 41 default: 42 break; 43 } 44 ?>
則會同樣報模板不存在的錯誤,
實際,此時我們需要創建一個視圖。
根據上面的錯誤提示,我們需要進入 addons/wechat/addons/hello 目錄,創建一個template目錄,並在template 目錄下創建一個default目錄,然后在default 目錄下創建一個名稱為index.html的視圖文件。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>無標題文檔</title> 6 </head> 7 8 <body> 9 </body> 10 </html>
此時再次刷新URL,則不再報錯,正常輸出了hello world 字符串。
4、將控制器的變量到模板里顯示。
前面的例子我們都是通過php的 echo、exit等直接輸出字符串,視圖似乎並沒有起到應有的作用。
事實上,在真正的模塊開發中,控制器一般用於獲取變量,然后通過視圖將變量的值多樣化的呈現給用戶。
控制器端:
1 <?php 2 use wechat\hello\hello; 3 use phpWeChat\Area; 4 use phpWeChat\CaChe; 5 use phpWeChat\Config; 6 use phpWeChat\Member; 7 use phpWeChat\Module; 8 use phpWeChat\MySql; 9 use phpWeChat\Order; 10 use phpWeChat\Upload; 11 12 !defined('IN_APP') && exit('Access Denied!'); 13 14 switch($action) 15 { 16 case 'index': 17 $str= 'hello world!'; 18 break; 19 //以下 case 條件僅為 示例。您可以根據業務邏輯自由修改和拓展 20 21 //case 'index': 22 23 //在此寫 index.php?m=hello&a=index 時的邏輯 24 25 //break; 26 27 //case 'list': 28 29 //在此寫 index.php?m=hello&a=list 時的邏輯 30 31 //break; 32 33 //以此類推... 34 35 //case '...': 36 37 //在此寫 index.php?m=hello&a=... 時的邏輯 38 39 //break; 40 41 default: 42 break; 43 } 44 ?>
視圖端:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>無標題文檔</title> 6 </head> 7 8 <body> 9 {$str} 10 </body> 11 </html>
刷新URL,達到了同樣的效果。
至此,一個小型的phpWeChat功能模塊就誕生了。:)
注:本文是基於phpWeChat1.0.8版本講解(下載地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20)。