如果微信插件仅仅简单的逻辑处理,没有动态数据的增、删、改、查操作,这部分都是可以不要的,甚至可以删除掉,如上面的HelloWorld插件,就不需要用到控制器这部分。
最简的控制器文件代码结构如下:
~~~
namespace Addons\Vote\Controller;
use Home\Controller\AddonsController;
class VoteController extends AddonsController {
public function __construct() {
parent::__construct ();
}
~~~
先命名空间和使用AddonsController控制器,注意微信插件里所有的控制器都需要继承AddonsController,否则无法在浏览器里通过URL访问到它。
需要在获取访问插件控制器的地址,可以通过 addons_url函数生成,例如下图:
~~~
$id=I('id');
$url=addons_url('Vote://Vote/index',array('id'=>$id));
~~~
上图中生成的$url 变量就是访问投票插件(Vote://)中的VoteController.class.php文件里的show方法,同时带三个GET参数进来
AddonsController控制器不仅提供了浏览器通过URL访问插件控制器的方法,还提供了与插件标识名相同的数据模型(如果后台有增加的话)的常用操作和对应的HTML模板,包括列表管理(lists)、增加(add)、删除(del)、修改(edit)、配置(config)等操作。
即在一般一个插件对应一个数据表的情况下,你基本可以不增加一个代码,就可以在WeiPHP前台对数据进行常规管理和维护,极大减轻了开发人员的负担。后续的复杂微信插件开发案例有这部分的使用例子。
如果AddonsController控制器提供的常用操作不能满足业务需求,可以在插件控制器里重写相应的方法来覆盖AddonsController控制器的方法即可。
如在投票插件里,因为增加一个投票时不仅仅要把信息保存到投票数据表(wp_ovte)中,还增加把选项信息也保存到投票选项表中(wp_vote_option),所以在我们的VoteController.class.php重写了lists、add、del、edit方法,当然也新增加了其它几个业务需要的方法
在你看VoteController.class.php代码之前,你首先需要了解oneThink封装的强大而易用的模型管理功能,功能的使用可参考oneThink的手册:
模型管理:http://document.onethink.cn/manual_1_0.html#onethink_usehelp_model
独立模型:http://document.onethink.cn/manual_1_0.html#onethink_2_7
所谓的模型管理,我们的理解就是一般情况下一个模型对应一个数据表(也可能是多个数据表),而这个模型已经封装好了对这个数据表的一些常用的操作和模板,如增加数据的表单页面,管理数据的列表页面等都封装了通用的操作和页面。
开发者只需要在后台把模型的参数配置好就OK,省去了自己写处理程序和设计模板,JS控制,表单验证等繁琐而重复的工作,而且代码少还容易维护,因此这很有必要学习怎么用它。当然如果你不想学习,也是可以直接按你自己的方式在插件
控制器里完成你的业务需求的。
在插件控制器里和在应用里(Application目录下 )控制器里开发大部分都是一样,区别主要在下面几个地方,开发过程一定要注意
1)控制器里的常量
在应用里,MODULE_NAME、CONTROLLER_NAME 、ACTION_NAME,分别代表组名、控制器名、方法名
但在插件里,因为插件的访问是通过home/addons/execute这样的方式间接访问,因此MODULE_NAME、CONTROLLER_NAME 、ACTION_NAME这三个常量都是固定为home、addons、execute
这不与插件控制器对应起来,因此在插件里。增加了_ADDONS、_CONTROLLER、_ACTION来分别代表插件标识名、插件控制器名、插件控制器方法名
上面的理论有点绕,直接来看看下面的访问投票列表管理页面的地址:
http://www.weiphp.cn/index.php?s=/home/addons/execute/_addons/vote/_controller/vote/_action/lists.html
该地址访问的是 Addons/Vote/Controller/VoteController.class.php里的lists方法,那么它对应的常量值应该是这样的:
MODULE_NAME: Home
CONTROLLER_NAME : Addons
ACTION_NAME: execute
_ADDONS: Vote
_CONTROLLER: Vote
_ACTION: lists
2)插件里的模板定位
由于系统真实的控制器是home/addons/execute,因此要在oneThink原系统中访问插件目录下的View里的模板,你需要自己先找出模板的地址,然后再调用dispaly方法进行渲染模板,如:
$this->display ( T ( 'Addons://Vote@Vote/lists' ) );
但这样的方式总感觉不大方便,因此WeiPHP直接在AddonsController控制器里重写了display方法,开发者可以像在应用里一样使用display方法,不再需要先找出模板地址,上面的方法可以简写成:
$this->display ( );
或者 $this->display (‘lists’);
或者 $this->display ( 'Vote/lists' ) );