热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单MVC示例演示

创建配置文件 config.php配置文件应该是第一个被加载的文件config.php代码只提供数据库连接,应用中的控制器设置等基本功能其它功能,可自行添加创建核心类库MVC创建框架核心类库 core

创建配置文件 config.php


  • 配置文件应该是第一个被加载的文件

    config.php代码

  1. php
  2. //数据库连接文件
  3. define('DATABASE', [
  4. 'type' => 'mysql',
  5. 'host' => 'localhost',
  6. 'dbname' => 'phpedu',
  7. 'port' => '3306',
  8. 'charset' => 'utf8',
  9. 'username' => 'root',
  10. 'password' => 'root'
  11. ]);
  12. //应用相关
  13. define('APP', [
  14. //默认控制器
  15. 'default_controller' => 'index',
  16. //默认方法
  17. 'default_action' => 'index'
  18. ]);
  19. //项目根路径
  20. define('ROOT_PATH', __DIR__);
  21. ?>


  • 只提供数据库连接,应用中的控制器设置等基本功能
  • 其它功能,可自行添加

    创建核心类库MVC

  • 创建框架核心类库 core 目录,将 mvc 类放进去,方便统一管理和更新

    控制器类文件Controller.php代码

  1. php
  2. namespace phpedu;
  3. class Controller
  4. {
  5. // 模型对象
  6. protected $model;
  7. // 视图对象
  8. protected $view;
  9. // 控制器类实例时,要确保模型和视图对象可用
  10. public function __construct($model,$view)
  11. {
  12. $this->model = $model;
  13. $this->view = $view;
  14. }
  15. public function index()
  16. {
  17. // 1. 模型: 获取数据
  18. $data = $this->model->getAll(10);
  19. // 2. 视图: 渲染模板
  20. $this->view->display($data);
  21. }
  22. }
  23. ?>

模型类文件Model.php代码

  1. php
  2. namespace phpedu;
  3. use PDO;
  4. class Model
  5. {
  6. // 数据对象
  7. protected $db;
  8. // 模型实例化时,应该将数据库连接上,为后面的操作做好准备
  9. public function __construct($dsn,$username,$password)
  10. {
  11. $this->db = new PDO($dsn,$username,$password);
  12. }
  13. // 通常模型类中,会预置一些公共方法,供用户进行数据库操作
  14. public function getAll($n = 10)
  15. {
  16. $stmt = $this->db->prepare('SELECT * FROM `staff` LIMIT ?');
  17. $stmt->bindParam(1, $n, PDO::PARAM_INT);
  18. $stmt->execute();
  19. return $stmt->fetchAll();
  20. }
  21. }
  22. ?>

渲染视图类文件View.php代码

  1. php
  2. namespace phpedu;
  3. class View
  4. {
  5. public function display($data)
  6. {
  7. // 1. 模型赋值
  8. $staffs = $data;
  9. // 2. 渲染模型
  10. include ROOT_PATH . '/view/' .'show.php';
  11. }
  12. }
  13. ?>

自定义默认控制器类模型


  • 自定义控制器和模型和视图类,继承自核心类库中的对应类
  • IndexController.php 代码

  1. php
  2. namespace phpedu;
  3. // 默认控制器
  4. class IndexController extends Controller
  5. {
  6. }
  7. ?>


  • 自定义模型 StaffModel.php 代码

  1. php
  2. namespace phpedu;
  3. // 用户自定义模型
  4. class StaffModel extends Model
  5. {
  6. }
  7. ?>

MVC目录结构

mvc目录结构


视图模板文件show.php 代码

  1. lang="en">
  2. charset="UTF-8">
  3. http-equiv="X-UA-Compatible" content="IE=edge">
  4. name="viewport" content=">
  5. >
  6. >员工信息表
  7. id
  8. 姓名
  9. 性别
  10. 邮箱
  11. 操作
  12. php foreach ($staffs as [$id, $name, $sex, $email]) : ?>
  13. $id ?>
  14. $name ?>
  15. $sex ? '女' : '男' ?>
  16. $email ?>
  17. href="">修改
  18. href="">删除
  19. php endforeach ?>

入口文件index.php 代码

  1. php
  2. namespace phpedu;
  3. // 加载配置项
  4. require __DIR__ . '/config.php';
  5. // 加载框架的核心类型
  6. require __DIR__ . '/core/Controller.php';
  7. require __DIR__ . '/core/Model.php';
  8. require __DIR__ . '/core/View.php';
  9. // 加载自定义模型
  10. require __DIR__ . '/model/StaffModel.php';
  11. // 将关联数组解构成一一个独立变量
  12. extract(DATABASE);
  13. $dsn = sprintf('%s:dbname=%s', $type, $dbname);
  14. $model = new StaffModel($dsn, $username, $password);
  15. // c=控制器, a=控制器的方法 ?c=controller&a=action
  16. $c = $GET['c'] ?? APP['default_controller'];
  17. $a = $GET['a'] ?? APP['default_action'];
  18. // 获取类名
  19. $class = ucfirst($c) . 'Controller';
  20. // 加载自定义控制器类
  21. require __DIR__ . '/controller/' . $class . '.php';
  22. // 加载视图类
  23. $view = new VIew();
  24. // 完整控制器类名
  25. $fullclass = __NAMESPACE__ . '\\' . $class;
  26. $controller = new $fullclass($model,$view);
  27. // 执行控制器中的index()方法
  28. echo $controller->$a();
  29. ?>

执行页面效果

页面效果


推荐阅读
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
author-avatar
mobiledu2502890451
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有