MySQL-php框架中$this->display()是如何获取本方法定义的变量并传递到模板里面的?
我用thinkphp,控制器要传递变量给模板时候,只要在控制器方法里面定义任意多个变量,然后后面加上一句:
$this->display(),
方法内的全部变量都能自动传递到模板里面了。
这个是怎么实现的??什么原理?
变量要传到函数里面,除了在括号里面传值,不能就只能用global了吗?框架既没有global,又没有括号传参,控制器方法的变量是怎么跑到模版里面去的?
我自己写的框架,没这个功能,要传变量给模板只能这样:$this->display($abc);为了模板那边接收方便,我一般只传一个变量,控制器这边有多个=变量的就压成一个数组传过去。看起来很土鳖的感觉。
怎么办呢这个???怎写能写一个不用括号赋值就能自动把控制器变量都传到模板的功能?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我自己写的时候是这么写的:
class Controller{
protected $view_vars = array();
public function __set($var,$val){
$this->view_vars[$var]=$val;
}
public function display($tpl){
$view = new View();
$view->display($tpl,$this->view_vars);
}
}
class View{
public function display($tpl,$data){
extract($data);
require $tpl;
}
}
class IndexController extends Controller{
public function index(){
$this->title = 'asdf';
$this->display('index');
}
}
主要是extract函数。。。你看看这个函数就了解了。
在controller里include 模板文件,模板里便可以使用类里的局部变量 。 ArPHP 我自己写了个php框架,呵呵 去试试
模板最终还是php代码,传递变量只是把关键字替换而已。
例:
模板类有字符“{$username}”,php代码替换"{$username}"为"<?php echo $username?>"
去google下模板原理