视图模型的使用(创建、使用)
视图模型概念
框架将MVC模型里面的V(视图)分成了视图模型层(ViewModel)和模版层(Template)这个模版层实际就是视图层 框架在MVC的视图层上面加了一个可选层视图模型层(ViewModel)注意是可选的,可编写一些自定义方法,在视图里面用$this直接调用
创建视图模型
存放位置
视图放在view目录下面,如app/admin/view/BaseView.php
命名规则
控制器名称 + 后缀View关键词,如BlogView、DocumentView
创建视图模型
<?php
namespace app\web\view;
use Timo\Core\View;
class DocumentView extends View
{
}
视图模型的使用
什么时候会使用视图模型
我们一般可以不使用视图模型,当web项目比较大的时候可以使用,当然我们要是写app接口,那肯定不会用的,视图模型里面可以提供一些共用方法、小部件、插件、分担一些控制器任务
怎样使用视图模型
当我们应用的view目录里面有和当前控制器同名的视图模型时,框架会自动加载该视图模型,如果没有,就不加载
比如我们有个基础的视图,提供一些基础的方法
<?php
namespace app\web\view;
use Timo\Core\View;
class BaseView extends View
{
protected $css = 'index';
/**
* 获取静态资源路径
*
* @param $url
* @return string
*/
protected function staticRes($url)
{
return $this->res($url);
}
/**
* 当前页面css文件
*
* @return string
*/
protected function currentCss()
{
$css = !empty($this->data['view_css']) ? $this->data['view_css'] : $this->css;
return $this->staticRes('css/'. $css . '.css');
}
protected function metaKeywords()
{
return isset($this->data['keywords']) ? $this->data['keywords'] : '';
}
protected function metaDesc()
{
return isset($this->data['desc']) ? $this->data['desc'] : '';
}
}
比如上面Base这个视图模型提供了staticRes()这个方法,我们就可以在视图(模版)里面调用,比如,我们要引入基础的css样式base.css
<link rel="stylesheet" href="http://www.timophp.com/static/css/base.css">
我们就可以这样调用
<?= $this->staticRes('css/base.css') ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="<?= $this->staticRes('css/base.css') ?>">
<title>视图模型使用(创建、使用) - TimoPHP</title>
</head>
<body>
<h2>TimoPHP Document</h2>
</body>
</html>
好处是什么呢?好处就是我们可以随意跟换静态文件的域名, 比如上面的域名是www.timophp.com,过一段时间我们把静态文件分离到了另外一个服务器,域名是s1.timophp.com 这时我们就可以修改这个staticRes方法,怎样修改呢?请看下面:
php
/**
* 获取静态资源路径
*
* @param $url
* @return string
*/
protected function staticRes($url)
{
return $this->res($url, 'http://s1.timophp.com/');
}
之前的连接就会变成
<link rel="stylesheet" href="http://s1.timophp.com/css/base.css">
我们的模版就不用改变,当然,还可以把这个域名写到配置文件,到时候直接改配置文件, 当然,这个连接也不会经常变,所以,写在里面也无妨