目标
实现MVC模型的View层,Controller的Action中应可以将从Model层获取的数据填充到View模板中,并将渲染结果返回给访问者。本文并不志在实现一个完备的模板框架,相应的需求可借助Smarty这样现有的实现。
获取代码
|
|
设计与实现
View的模板是最好实现的,因为PHP本身就是一个模板语言,所以这里实现的模板主要是指几条约定:
- 模板文件本身是一个普通PHP文件,文件名后缀是“.php”;
- 模板文件应存储在项目指定的模板基础目录中;
- 模板名称指模板文件相对于项目的模板基础目录的路径,并且去掉文件后缀;
- 模板本身的实际效果等同于在Controller的Action中执行的代码,故可以调用Controller的所有方法以及Flame对象的方法等内容;
- 所有要填充到模板中的数据以键值对的形式存储在一个关联数组中,并传递给渲染模板的方法,在模板中使用与键名相同的变量调用数据;
View的渲染方法
添加Controller::render()方法:
|
|
$view是模板名称,$data是要填充到模板中的数据。
验证Demo
在Demo项目的protected下新增文件“view/post/list.php”,并创建不存在的这两个上级目录“view”和“post”。内容如下:
|
|
将DefaultController::index()方法修改为:
|
|
访问Demo项目,页面将显示预期的内容和样式。
总结
PHP本身的特点使得View这一层很容易实现。不过,随著富客户端的流行,MVC模型的View这一层正在被逐渐弱化,现在主流的开发方式是前端通过AJAX与服务器端交换数据,而不是把数据填充到模板中再返回给客户端。