视图模型的使用(创建、使用)

 


 

视图模型概念

框架将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('base.css') ?>

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="<?= $this->staticRes('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/css/');
    }

 

之前的连接就会变成
<link rel="stylesheet" href="http://s1.timophp.com/css/base.css">
我们的模版就不用改变,当然,还可以把这个域名写到配置文件,到时候直接改配置文件,
当然,这个连接也不会经常变,所以,写在里面也无妨