在thinkphp3.1Widget的新用途

Widget ThinkPHP3.0版本还没有行动,看来足够的支持,只能实现基本的模板渲染输出,3.1版本的发布带来的多层MVC功能,给了我们一种新的方法实现控件,以及如何实现它。



作为thinkphp3.1增加MVC多层支持,3.1版本可以支持多层控制器的功能,所以我们可以添加另一个层,控制层:部件层。

首先,创建一个widget目录项目的lib目录下创建一个testwidget类(库 /部件/ testwidget。类。PHP)如下:


类testwidget延伸动作{
公共函数hello($ = ''){
hello。!;
}
}




我们看到,testwidget和以前的区别不是继承Widget类,而是直接继承Action类,这意味着我们可以直接调用动作testwidget,包括渲染输出模板。

定义完成后我们如何调用这个小部件使用W方法当然是不可能的,这一次需要R方法。

R方法的作用是远程调用模块操作,但是3.1给它一个新角色并支持控制器层的所有操作方法。因此,我们可以在模板中调用小部件。


{::R(测试/你好,阵列('thinkphp),'widget)}




可以在页面的一个区域实现输出:


你好,ThinkPHP!




由于控制器以外的其他控制器层不能直接通过URL访问,因此只能用R方法内部调用小部件方法。

你可以调用模型在testwidget类输出的其他数据,如果你需要绘制自己的模板,可以直接调用显示方法。


类testwidget延伸动作{
公共函数hello($ = ''){
美元->分配('name',$name);
美元->显示(测试:你好);
}
}




我们在项目的第三方/目录目录下创建一个hello(TPL)测试模板文件,添加输出:


你好,{ $ }!




如果您想将模板文件放在当前目录下,就像前面的小部件一样,您可以使用它:


类testwidget延伸动作{
公共函数hello($ = ''){
美元->分配('name',$name);
美元->显示(dirname(__file__)。 /测试/你好。HTML);
}
}




此时,您可以将刚才定义的hello模板文件放在小部件目录下。