php 控制器 插件,插件控制器

如果微信插件仅仅简单的逻辑处理,没有动态数据的增、删、改、查操作,这部分都是可以不要的,甚至可以删除掉,如上面的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' ) );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值