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


视图模型概念

框架将MVC模型里面的V(视图)分成了视图模型层(ViewModel)和模版层(Template)这个模版层实际就是视图层 框架在MVC的视图层上面加了一个可选层视图模型层(ViewModel)注意是可选的,可编写一些自定义方法,在视图里面用$this直接调用

创建视图模型

存放位置

视图放在view目录下面,如app/admin/view/BaseView.php

命名规则

  1. 控制器名称 + 后缀View关键词,如BlogViewDocumentView

创建视图模型

  1. <?php
  2. namespace app\web\view;
  3. use Timo\Core\View;
  4. class DocumentView extends View
  5. {
  6. }

视图模型的使用

什么时候会使用视图模型

我们一般可以不使用视图模型,当web项目比较大的时候可以使用,当然我们要是写app接口,那肯定不会用的,视图模型里面可以提供一些共用方法、小部件、插件、分担一些控制器任务

怎样使用视图模型

当我们应用的view目录里面有和当前控制器同名的视图模型时,框架会自动加载该视图模型,如果没有,就不加载

比如我们有个基础的视图,提供一些基础的方法

  1. <?php
  2. namespace app\web\view;
  3. use Timo\Core\View;
  4. class BaseView extends View
  5. {
  6. protected $css = 'index';
  7. /**
  8. * 获取静态资源路径
  9. *
  10. * @param $url
  11. * @return string
  12. */
  13. protected function staticRes($url)
  14. {
  15. return $this->res($url);
  16. }
  17. /**
  18. * 当前页面css文件
  19. *
  20. * @return string
  21. */
  22. protected function currentCss()
  23. {
  24. $css = !empty($this->data['view_css']) ? $this->data['view_css'] : $this->css;
  25. return $this->staticRes('css/'. $css . '.css');
  26. }
  27. protected function metaKeywords()
  28. {
  29. return isset($this->data['keywords']) ? $this->data['keywords'] : '';
  30. }
  31. protected function metaDesc()
  32. {
  33. return isset($this->data['desc']) ? $this->data['desc'] : '';
  34. }
  35. }

比如上面Base这个视图模型提供了staticRes()这个方法,我们就可以在视图(模版)里面调用,比如,我们要引入基础的css样式base.css

  1. <link rel="stylesheet" href="http://www.timophp.com/static/css/base.css">

我们就可以这样调用

  1. <?= $this->staticRes('css/base.css') ?>
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <link rel="stylesheet" href="<?= $this->staticRes('css/base.css') ?>">
  6. <title>视图模型使用(创建、使用) - TimoPHP</title>
  7. </head>
  8. <body>
  9. <h2>TimoPHP Document</h2>
  10. </body>
  11. </html>

好处是什么呢?好处就是我们可以随意跟换静态文件的域名, 比如上面的域名是www.timophp.com,过一段时间我们把静态文件分离到了另外一个服务器,域名是s1.timophp.com 这时我们就可以修改这个staticRes方法,怎样修改呢?请看下面:

  1. php
  2. /**
  3. * 获取静态资源路径
  4. *
  5. * @param $url
  6. * @return string
  7. */
  8. protected function staticRes($url)
  9. {
  10. return $this->res($url, 'http://s1.timophp.com/');
  11. }

之前的连接就会变成

  1. <link rel="stylesheet" href="http://s1.timophp.com/css/base.css">

我们的模版就不用改变,当然,还可以把这个域名写到配置文件,到时候直接改配置文件, 当然,这个连接也不会经常变,所以,写在里面也无妨