MVC with PHP(一)中的bug的问题是存在,最大的问题是日志系统的问题,等完成这这个介绍后我后把全部更正的程序源码打包 出来,这里就暂时不做更改了. 先来看看在application.class.php中是如何建立controller实例的: PHP代码:-------------------------------------------------------------------------------- /** * 执行函数 * * 此类唯一对外的一个接口 **/ public function run() { $this->parsePath(); $this->checkSecurity($this->module, $this->action); $controller = new $this->controllerClassName(); $controller->{$this->action}(); $this->writeLog($this->module, $this->action); } -------------------------------------------------------------------------------- Application这个类在实例后唯一可进行调用的一个函数,它根据用户的URL请求来分析得出所需要的Controller类名,然后实例化这个类(上面标1的地方),再调用从URL中获取的动作名称(上面标2的地方), 这个举一个简单的例子: URL: http://localhost/?module=news&action=showList Application通过分析这个URL重到controllerClassName=news, action=showList,然后它将在包含处理这个controller类的文件名(在Application->getControllerFile()中进行),然后实例化News这个 controller类(标1的地方), 随后调用它的动作showList(标2的地方). 来看看newsController.php中的内容: ============================================================= PHP代码:-------------------------------------------------------------------------------- CODE:
<?php
-------------------------------------------------------------------------------- ============================================================== 首先,NewsController类继承自公共类Controller,在类进行初始化时产生一个NewsModel类,这个类是一个model类,由这个类负责新闻模块所有的对数据库的交互. parent::__construct()调用父类的构造函数,完成对view的控制类Smarty的初始化.$this->setSmartyTemplate_dir("./view/news")将模板目录定位在./view/news目录. 然后看我们上面的例子,请求URL为http://localhost/?module=news&actio...List,表示要调用 showList这个动作,看NewsController类的showList()成员函数: $newsList = & $this->model->getList(): $this->model在NewsController初始化时建立,这一句要使用$this->model从数据库里提取出一个新闻列表,这个列表当然就是Smarty在操作循环块时需要的二维数组了,在NewsModel类中,它是采用ADODB回传的一个二维数组. $this->smarty->assign("newsList", $newsList): 熟悉吧,smarty中循环块的程序控制 unset($newsList):考虑到效率问题,对于这些临时变量在使用完成后即时将它unset。 $this->smarty->display("newsList.html"):使用smarty来显示view. 大家看明白了吗?实际上controller类要做的事情就是这样:1.调用model从数据库取出记录 2.操 作Smarty显示view。 再来看看NewsController的父类Controller类的源码: =========================================================== PHP代码:-------------------------------------------------------------------------------- CODE:
<?php
-------------------------------------------------------------------------------- ============================================== Controller是一个抽象类,也就是说它不可以直接使用new 来产生一个实例对象,在类的构造函数里产生一个Smarty类,并对其进行基本的设置。其它的几个函数是对Smarty对象进行设置的成员函数, 这里来看看这两个函数: public function redirect($module, $action, $params="", $message="动作已经被成功执行"): 这是一个重新定向成员函数,它的作用是当我们对模块进行一些操作后给出的提示页面,然后经过设置好的时间自动重新定向到另一个位置,例如我们要对新闻进行一些删除,删除成功后我们要给用户返回这样一个页面,告诉用户操作已经成功,请待n秒后自动返回....这在论坛中是很常见的,这里我也引用了这样的策略。 public function __call($name, $parameter): 当类调用类没有声明的函数时使用这个函数进行处理,这可是个好东东,有了它,可以使用对程序 的控制更加简单了,大家可以试试这个方法.... 好了,Controller 部分就谈到这里了。 |