博主信息
博文 31
粉丝 0
评论 0
访问量 21053
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
mvc架构模式的运行原理,各自职责依赖注入与服务容器的?
木子木杉
原创
1207人浏览过

mvc架构模型的运行原理

将M\V\C分离,就是减少耦合,提高代码的复用性,也就是说,不要在页面上进行数据访问和处理,也不要在视图层试图控制页面的
现实逻辑,划分请3者的责任。

三者各自职责

M:Mode(模型层),最 bottom 一层,是核心数据层,程序需要操作的数据或信息
V:View(视图层),最 top 一层,直接面对最终用户,视图层提供操作页面给用户,被誉为程序的外壳
C:Controller(控制层),是 middile 层,它负责根据用户从“视图层”输入的指令,选取“数据层”的数据,然后对其进行相应的操作,产生最终结果

  1. <?php
  2. namespace chloe\app;
  3. use PDO;
  4. class Model
  5. {
  6. public function getDate()
  7. {
  8. return (new PDO(
  9. 'mysql:host=localhost;charset=utf8;port=3306;dbname=phpcn',
  10. 'root',
  11. '',
  12. [
  13. PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
  14. ]
  15. ))->query("SELECT `cou_id`,`title`,`pic`,`info`,`add_time` FROM `mj_course_lists` ORDER BY `cou_id` DESC LIMIT 6")->fetchAll();
  16. }
  17. public function editDate()
  18. {
  19. }
  20. }
  21. //获取模型数据
  22. // var_dump((new Model)->getDate());
  1. <?php
  2. namespace chloe\app;
  3. // require 'Model.php';
  4. class View
  5. {
  6. //$data渲染到视图层的数据
  7. public function fetch($data)
  8. {
  9. $table = '<table border="1" cellspacing="0" cellpadding="5" align="center">';
  10. $table .= '<caption>课程信息表</caption>';
  11. $table .= '
  12. <tr>
  13. <th>编号</th>
  14. <th>名称</th>
  15. <th>封面</th>
  16. <th>课程简介</th>
  17. <th>创建时间</th>
  18. <th>操作</th>
  19. </tr>
  20. ';
  21. foreach ($data as $list) {
  22. $table .= '<tr>';
  23. $table .= '<td>' . $list['cou_id'] . '</td>';
  24. $table .= '<td>' . $list['title'] . '</td>';
  25. $table .= '<td><img style="width:100px" src="' . $list['pic'] . '" alt="课程封面"></td>';
  26. $table .= '<td>' . $list['info'] . '</td>';
  27. $table .= '<td>' . date("Y-m-d H-m-s", $list['add_time']) . '</td>';
  28. $table .= '<td><button>删除</button><button>编辑</button></td>';
  29. $table .= '</tr>';
  30. }
  31. $table .= '</table>';
  32. return $table;
  33. }
  34. }
  35. // $data = (new Model)->getDate();
  36. // echo (new View)->fetch($data);
  1. <?php
  2. namespace chloe\app;
  3. //类的自动加载
  4. require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
  5. //中间层 controller 协调m v
  6. class Controller
  7. {
  8. //将外部依赖的对象 model view 在具体的操作方法中注入进来
  9. function index(Model $model, View $view)
  10. {
  11. //获取数据
  12. $data = $model->getDate();
  13. //渲染数据到视图层
  14. return $view->fetch($data);
  15. }
  16. function edit(Model $model, View $view)
  17. {
  18. $model->editDate();
  19. }
  20. }
  21. $model = new Model;
  22. $view = new View;
  23. echo (new Controller)->index($model, $view);

依赖注入

依赖注入其实本质上是指对类的依赖通过构造器完成自动注入,例如在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于访问控制器的参数都来自于URL请求,普通变量就是通过参数绑定自动获取,对象变量则是通过依赖注入生成。
将外部依赖的对象 model view 在构造器中注入进来 完成外部对象在多个方法中共享

服务容器

如果当前类所依赖的外部对象过多,名称很长 将依赖的所有外部对象放到一个容器中统一管理,并且还可以起别名
服务容器 一个自动生成类 对象的工厂
容器中所有的对象实例都可以通过容器标识单例调用,你可以给容器中的对象实例绑定一个对象标识,如果没有绑定则使用类名作为容器标识。

批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学