0

0

php源码之区分平台MVC结构的介绍

不言

不言

发布时间:2018-07-04 16:24:25

|

2389人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了关于php源码区分平台mvc结构的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

主要:

  1. 模型单例工厂

  2. 目录结构优化

  3. 区分平台(前台,后台....)

    立即学习PHP免费学习笔记(深入)”;

--------------:--------------------------------------
blog
├─App
│  ├─Model 模型
│  │  └─UserModel.class.php 用户模型类    
│  ├─View 视图
│  │  ├─Back后台
│  │  │  └─Index
│  │  │          └─index.html  后台首页面
│  │  └─Home前台
│  │      └─User 用户视图目录
│  │             └─login.html  登录表单页面
│  ├─Controller 控制器
│  │  ├─Back后台
│  │  │  └─IndexController.class.php 后台首页控制器
│  │  └─Home前台
│  │      └─UserController.class.php 用户控制器
├─Public   静态公共文件(js,css,images)
│  ├─Plugins 插件
│  │  └─layui 前端框架插件
│  ├─Back后台
│  │    ├─js/   js文件
│  │    ├─css/  css样式文件
│  │    └─image img图片 
│  └─Home前台
│      ├─js/   js文件
│      ├─css/  css样式文件
│      └─image img图片 
├─Frame 公共使用的类
│   ├─BaseModel.class.php 数据库连接类
│   ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)
│   ├─FactoryModel.class.php  模型工厂类
│   └─MySQLDB.class.php 数据库操作工具类
└─index.php  入口文件
----------------------------------------------------------------

 下载查看该项目源码: https://gitee.com/NewbiesYang/young_blog

模型单例工厂

准备: 创建分支

1 $ git checkout master
2 $ git checkout -b "folder-model-app"

说明:

  1)程序中3行 。。。 表示省略的代码。从前面或源码中可查看

  2) 【XXX/XXX】表示项目文件相对路径

  思路:

  问题: 项目中模型操作数据表,一个动作可能就要操作一次数据库,一次请求多个动作,每个动作都需要去实例化对应模型

  解决想法: 创建一个模型类单例工厂
       实现: 创建单例的模型类  FactoryModel.class.php
          属性$model=array(); 存储模型类实例
          方法: M($cmodelName, array $conf=null) 实例化模型类
      使用: 控制器中使用模型类实例:$model=FactoryModel::M('模型名称')

  代码实现

1) 创建模型单例工厂 【Frame/FactoryModel.class.php】

 1 

2) 引入该类文件 【index.php】

 1 

入口文件引入工厂模型类

3) 应用: 控制器中使用,如用户控制器UserController中 登录操作【Controller/UserController.class.php】

 1  checkLoginInfo($data);
 24         //替换上面两行
 25         $result = FactoryModel::M('User')->checkLoginInfo($data);
 26 
 27         //跳转提示
 28         if($result){
 29             $this->msg('登录成功!', '?a=index',3);
 30         } else {
 31             $this->msg('用户名或密码不正确!!');
 32         }
 33     }
 34 }

4) 测试程序运行,http://www.test.com/blog/index.php  登录测试结果与前面一致。暂时先提交代码

1 git add -
2 git commit -m "完成模型工厂类"

目录结构优化

   思路

 多个平台(模块):前后,后台
        MVC结构分平台
            C:  Controllers/Home      Controllers/Admin  .....
            V:  Views/Home                Views/Admin  .....
            M:   操作数据表一般模块共用
        公共资源目录Public: Public/Home  Public/Admin  .....
     目录结构变化,所有载入类,视图的路径做相应变化 

  代码实现

1)操作步骤

1)目录构建: 
step 1: 根目录下创建目录App, 将Model目录,View目录,Controller目录放大App目录下
	既根目录只有: App/ Public/ Frame/  index.php

step 2: 在Controller目录中,创建Back目录和Home目录。将UserController控制器类文件放入Home目录中

step 3: 在View目录中,创建Back目录和Home目录。将login.html文件放入Home目录中

step 4: 在Public目录中,创建Back目录,Home目录,Plugins目录。将js,images,css目录放入Home目录中,公共插件放入对应的Plugins目录中

2)文件引入修改:
step 5: index.php入口文件对UserCotroller类的引入路径修改

step 6:UserController类中对视图login.html的include路径的修改

step 7: 视图login.html中对css和js路径的引入

操作步骤思路

2) 具体代码修改操作

  入口文件引入类路径修改【index.php】 主要是用户模型类和用户控制器类路径引入修改

 1  $a();

入口文件引入类的修改

  用户控制器类对登录表单视图路径引入的修改 【App/Controller/Home/UserController.class.php】

 1 

用户控制器展示登录界面修改

  登录表单视图 【App/View/Home/User/login.html】 对静态资源路径的修改

 1  
 2  
 3  
 4      
 5     登录 
 6      
 7      
 8  
 9 。。。
 10 。。。
 11 。。。
 12 
 13 
 18 
 19 

登录表单视图

  效果及提交代码

 提交保存代码

仿蘑菇街.美丽说.简单的源码
仿蘑菇街.美丽说.简单的源码

网站有三种风格: 1、蘑菇街模板 2、美丽说模板 3、简单的模板 含插件,自动喜欢数,一键删除商品,自动采集淘宝商品,可发布文章做seo,还有其它很多,不一一介绍,程序结构清晰,1分钟就上手,功能非常强大! 自己采集商品,自动采集文章,采集商品评论,设置随机喜欢数!第三方登录模板,微博,QQ,淘宝都可以登录! 巨商网源码社区免费提供 bbs.viphe.net

下载
1 git add -A
2 git commit -m "目录结构优化"

区分平台(前台,后台....)

   思路

  实现根据平台的不同进行不同的操作

  用户点击页面请求,随着url发送3个参数: p=平台&c=控制器&a=动作
       入口文件接收get数据就可以知道:  平台, 控制器, 动作

  代码实现

1) 操作步骤:

1)入口文件平台区分:
    step 1:  入口-登录页面提交的action="?p=Home&c=User&a=dlogin"

    step 2:  入口文件index.php  接收$_GET

    step 3:  登录判断成功跳转地址: $this->msg('登录成功!', '?p=Admin&c=Index&a=index',3);
	
2) 后台首页:
     step 1:   静态css,js,img文件放置 Public/Admin/

     step 2:   创建后台首页控制器类,
			index() 载入后台首页视图文件

     step 3:  View/Admin/Index/index.html 修正css等静态文件路

操作步骤思路

2)登录表单提交action=“?p=Home&c=User&a=dlogin”    【App/View/Home/User/login.html】

 1  
 2  
 3  
 4      
 5     登录 
 6     
 7      
 8  
 9 
 10 

11

12

13 。。。。。。。

登录表单form提交action修改

3) 入口文件区分平台 【index.php】

 $a();

用户控制器登录操作,登录成功跳转到后台首页 【App/Controller/Home/UserController.class.php】

 1 checkLoginInfo($data);
 22 
 23         //跳转提示
 24         if($result){25             $this->msg('登录成功!', '?p=Admin&c=Index&a=index',3);26         } else {
 27             $this->msg('用户名或密码不正确!!');
 28         }
 29     }
 30 }

登录操作成功后跳转路径修改

  测试

 1)模板准备: 

      准备后台视图模板程序。可以自己写前端视图模板程序,也可以到网上下载别人写好的前端模板,如到 模板之家  选择所需求的 前台,后台模板 

      寻找模板:  www.mycodes.net

   2) 将后台模板视图的静态资源文件(如 js, css,image)拷贝到 【Public/admin/】目录下

   3) 创建后台首页控制器 【App/Controller/Admin/IndexController.class.php】

 1 

4) 创建后台首页视图 【App/View/Admin/Index/index.html】

  1   
  2   
  3   
  4       
  5     后台管理  
  6       
  7       
  8       
  9      
  10  
  11  
  12  
  13  
  14 

15

16

17

后台管理

18 22

23

24

29

30

31

32

33 34 35 36 37

菜单

40

41 61

62

63 64 65 66

67

68

69 70 欢迎使用博客后台管理系统。 71

72

73

74

75

系统基本信息

76

77

78

    79
  • 80 WINNT 81
  • 82
  • 83 Apache/2.2.21 (Win64) PHP/5.3.10 84
  • 85
  • 86 apache2handler 87
  • 88
  • 89 v-0.1 90
  • 91
  • 92 2M 93
  • 94
  • 95 96 97
  • 98
  • 99 localhost 100
  • 101
102

103

104

105 106 123

124124 125 126

后台首页视图

  效果及提交代码

  代码提交,推送

1 $  git add -A
2 $  git commit -m "区分平台,实现后台首页"
3 $  git checkout master
4 $  git merge 'folder-model-app'
5 $  git push origin master

小结: 根据平台进一步优化目录结构,制作模型的单例工厂,实现后台首页

提出问题

  1. 项目中可以看到 include或require的文件路径很长,容易出错,也不便于使用  ==> 如何更加简单引入且不易出错

     2. 写一个类,就要到入口文件引入一次, 比较麻烦  ==>  如何实现自动加载类

  3. 随着类的引入增加,入口文件代码量会越来越大  ==>  如何 封装,简化入口文件

  4. 现在项目中任何一个目录,都可以随意访问  ==> 如何加强安全访问,限制目录的访问

下一步:常量使用,自动加载类实现,入口封装,限制目录访问

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

php源码之搭建站点实现登录页面的方法

php源码之实现单入口MVC结构的方法

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

236

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1501

2023.10.24

require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

466

2023.11.27

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

469

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

13

2025.12.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

514

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3.1万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

php-src源码分析探索
php-src源码分析探索

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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