视图类代码如下:

  1. <?php
  2. // 视图类
  3. namespace phpcn;
  4. class view
  5. {
  6. //约定:控制器方法的模板,就是以控制器为目录名,以方法为文件名
  7. protected $controller;
  8. protected $action;
  9. protected $path;
  10. // 模板变量容器
  11. protected $data = [];
  12. // 初始化时创建模板的路径
  13. public function __construct($controller,$action,$path = '/view/')
  14. {
  15. $this->controller = $controller;
  16. $this->action = $action;
  17. $this->path = $path;
  18. }
  19. // 模板赋值:用assign()方法
  20. // assign()方法:在thinkphp中,assign()方法用于打印数组,该方法的第一个参数是在模板取值时所使用
  21. // 的变量名,第二个参数是要传递的值,语法为“$this->assign('name',$value);”。
  22. public function assign($name,$value)
  23. {
  24. // $name 是外部变量在模板文件中的变量
  25. // $value 是模板变量的值
  26. $this->data[$name] = $value;
  27. }
  28. // 模板渲染:一般用render()方法
  29. // 将模板赋值与模板渲染二合一
  30. public function render($path = '' ,$name = null, $value = null)
  31. {
  32. if ($name && $value) $this->assign($name,$value);
  33. // 展开模板变量数组
  34. extract($this->data);
  35. if (empty($path)) {
  36. // 按约定规则来生成模板文件的路径并加载它
  37. $file = __DIR__ .$this->path . $this->controller . '/' .$this->action . '.php';
  38. } else {
  39. $file = $path;
  40. }
  41. // include $file or die('视图不存在);
  42. file_exists($file) ? include $file : die('视图不存在');
  43. }
  44. }
  45. // 测试
  46. $controller = 'User';
  47. $action = 'hello';
  48. $view = new View($controller,$action);
  49. // 模板赋值:变量
  50. $view->assign('username','朱老师');
  51. $items = [
  52. ['name' =>'手机','price' => 2000],
  53. ['name' =>'电脑','price' => 3800],
  54. ['name' =>'相机','price' => 1800],
  55. ];
  56. $view->assign('items',$items);
  57. // 渲染模板
  58. // $view->render();
  59. // 渲染,赋值二合一
  60. $view->render($path = '','lang',['php','java','python']);

调用的视图控制器和方法代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <h3>User控制器的hello()方法</h3>
  11. <h3>Hello,<?= $username ?></h3>
  12. <ul>
  13. <?php foreach ($items as ['name'=>$name,'price'=>$price]): ?>
  14. <li><?= $name ?> :<?= $price ?></li>
  15. <?php endforeach ?>
  16. </ul>
  17. <ul>
  18. <?php foreach ($lang as $value): ?>
  19. <li><?= $value ?></li>
  20. <?php endforeach ?>
  21. </ul>
  22. </body>
  23. </html>

运行效果:

更多相关文章

  1. Android(安卓)- 主要的UI元素
  2. 如何创建QuickAction在Android对话 类似于苹果的效果
  3. Android--高级组件
  4. Android(安卓)Studio 3.6 正式版终于发布了
  5. Android(安卓)View视图绘制
  6. android事件拦截处理机制详解
  7. Flutter和Android中的View区别
  8. 解决办法Android中Error generating final archive: Debug certi
  9. android中android:src和android:background区别

随机推荐

  1. 如何强制python打印指定时区的numpy date
  2. python 网络编程02
  3. Python安装模块(numpy等)问题的两种解决办
  4. 如何在Python Django中附加数组字段
  5. [置顶] linux 下安装python cx_O
  6. 使用Python写HTML 文件使用jinja2中的模
  7. 【项目实战】自监控-09-DataFrame索引操
  8. django / python:具有多个表的原始sql
  9. 在创建表时执行Django fixture
  10. 安装Python3.6.3+spyder