作者:TerryGao1.Controllers在第一篇文章中我们讲到路由分发会将用户请求按照规则分发到controller层的不同类中,而在默认规则中,请求会被发送到controller的index类的main方法中,我们可以在该方法中处理用户请求,并将处理结果呈现给用户。看一下源码/*Nova/Application/Controllers/index.php*/getUserInfo($_GET['id']);print_r($userInfo);}}上面的代码完全没有安全性,GET信息没有任何过滤和校验,由于本系列文章只是介绍了基本的框架思路,所以这部分不是我们的重点,请暂时忽略(如果你真的受不了这么丑的代码,你可以在Github上forkNova项目,然后提交一个PullRequest给我)。在info()方法中,我们新建一个Modelsuser类,然后调用Modelsuser::getUserInfo()方法处理$_GET['id'],通过print_r()方法将获取到的用户信息打印出来。这里的Modelsuser类是MVC中M层的一个实现。2.模型层我们可以把数据组织和处理逻辑放在模型层,模型层封装了数据库操作,甚至一些大型框架都会在这一层将这个数据库对象化,目的是组织和处理数据,然后返回处理后的数据到控制器层。上一节提到的Modelsuser类是专门用来处理用户数据的模型类。看一下源码:/*Nova/Application/Models/user.php*/db=PDOMysql::connect()->db;}/***根据用户id查询用户信息并返回查询结果**@returnarray*/publicfunctiongetUserInfo($userId){$sql='select*fromuserwhereid=:userId';$stmt=$this->db->prepare($sql);$params=array(':userId'=>$userId);$stmt->执行($参数);返回$stmt->fetch();}}该类在构造时创建一个数据库连接,然后在getUserInfo()方法中,根据传入的用户id查询相应的用户信息,并将查询结果返回给调用者(控制器)。看看下面的图片,看看我们到目前为止有什么。嗯,可见MVC的View是没有的。View层有个好东西。也许您听说过甚至使用过它。是的,它就是聪明人。这么好的东西直接用。下载Smarty的源码,然后全部解压到Nova/Application/Library/Smarty下,我们怎么加载Smarty进去呢?首先修改Controller层,新建一个Controllersbase.php作为controller层的基类,这里我们引入并初始化Smarty,代码如下:/*Nova/Application/Controllers/base.php*/smarty=new\Smarty();//对smarty做一些基本设置//设置模板的存放位置$this->smarty->setTemplateDir(APP_DIR.'/Views/');//smarty编译文件存放位置$this->smarty->setCompileDir(ROOT_DIR.'/compiled/');//设置smarty配置文件存放位置$this->smarty->setConfigDir(CONFIG_DIR.'/smarty/');//smarty有自己的缓存,设置缓存的存放位置$this->smarty->setCacheDir(ROOT_DIR.'/cache/');}}然后我们让Controllersuser继承Controllersbase,然后我们就可以使用smarty了/*Nova/Application/Controllers/user.php*/getUserInfo($_GET['id']);//向smarty输入数据$this->smarty->assign('user',$userInfo);//通过smarty的显示函数index.tpl模板调用显示数据$this->smarty->display('index.tpl');}}模板代码如下:/*Nova/Application/View/index.tpl*/
