今天我们开始进入《10天学会phpWeChat》系列教程的第二天:创建我的第一个hello world! 功能模块。
1、登录后台,进入 系统设置——自定义模块,如图:
点击提交,提示自定义模块创建成功。
2、编写前端控制器。
如上图所示,模块创建成功后,自动进到模块管理列表页面,我们点击“复制模块链接URL”,然后在浏览器粘贴这个URL(http://www.example.com/index.php?m=hello&a=index)访问。系统提示:模板不存在的错误,如下图所示:
这是因为我们还没有创建视图和编写控制器逻辑。
进入 addons/wechat/addons/hello 目录,如下图所示:
我们首先打开index.php是前端访问控制器文件。
<?php
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>
根据访问URL(http://www.example.com/index.php?m=hello&a=index )的参数a 我们得出这个URL请求的是控制器的index路由。因此我们在index.php编写此路由代码:
<?php
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'index':
exit('hello world!');
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>
然后再次访问该URL,则出现了 hello world的文字。如图:
3、编写前端视图。
由于在 index 路由代码中,我们使用了exit,所以程序直接输出了hello world字符串,如果改成echo 这种非中断的输出,
<?php
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'index':
echo 'hello world!';
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>
则会同样报模板不存在的错误,
实际,此时我们需要创建一个视图。
根据上面的错误提示,我们需要进入 addons/wechat/addons/hello 目录,创建一个template目录,并在template 目录下创建一个default目录,然后在default 目录下创建一个名称为index.html的视图文件。
<!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" />
<title>无标题文档</title>
</head> <body>
</body>
</html>
此时再次刷新URL,则不再报错,正常输出了hello world 字符串。
4、将控制器的变量到模板里显示。
前面的例子我们都是通过php的 echo、exit等直接输出字符串,视图似乎并没有起到应有的作用。
事实上,在真正的模块开发中,控制器一般用于获取变量,然后通过视图将变量的值多样化的呈现给用户。
控制器端:
<?php
use wechat\hello\hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_APP') && exit('Access Denied!'); switch($action)
{
case 'index':
$str= 'hello world!';
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>
视图端:
<!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" />
<title>无标题文档</title>
</head> <body>
{$str}
</body>
</html>
刷新URL,达到了同样的效果。
至此,一个小型的phpWeChat功能模块就诞生了。:)
注:本文是基于phpWeChat1.0.8版本讲解(下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20)。