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

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

主要:模型单例工厂

目录结构优化

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

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 <?php

2 /**

3 * 单例模型工厂类

4 * User: young

5 */

6

7 class FactoryModel

8 {

9 protected static $model = array(); //存储模型类实例

10

11 /**

12 * 构造方法

13 */

14 protected function __construct()

15 {

16 }

17

18 /*

19 * 传递一个模型类的类名,就返回该类的一个单例实例对象

20 *@param string $modelName 模型类的类名

21 *@param array $conf 数据库配置信息

22 *@return object 传入模型类的实例(单例)

23 */

24 public static function M($modelName, array $conf=null)

25 {

26 $modelName = $modelName.'Model';

27 if(empty(static::$model[$modelName]) || !(static::$model[$modelName] instanceof $modelName)){

28 static::$model[$modelName] = new $modelName($conf);

29 }

30 return static::$model[$modelName];

31 }

32 }

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

2 /**

3 * 入口文件

4 */

5 require_once 'Frame/Db.class.php'; //数据库操作类

6 require_once 'Frame/BaseModel.class.php'; //基础模型类

7 require_once('Model/UserModel.class.php');

8

9 require_once 'Frame/FactoryModel.class.php';//模型工厂类

10 。。。

11 。。。

12 。。。

入口文件引入工厂模型类

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

2 /**

3 * UserController.class.php 用户控制器

4 */

5

6 class UserController extends BaseController{

7 。。。

8 。。。

9 。。。

10

11 /**

12 * 登录操作: 校验登录信息

13 */

14 public function dlogin()

15 {

16 //接收登录信息17 $data = array();

18 $data['username'] = trim($_POST['username']);

19 $data['pwd'] = trim($_POST['pwd']);

20

21 //实例化模型,调用模型方法

22 //$model = new UserModel();

23 //$result = $model->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 <?php

2 /**

3 * 入口文件

4 */

5 require_once 'Frame/Db.class.php'; //数据库操作类

6 require_once 'Frame/BaseModel.class.php'; //基础模型类

7 require_once 'App/Model/UserModel.class.php';

8

9 require_once 'Frame/FactoryModel.class.php';//模型工厂类

10

11 require_once 'Frame/BaseController.class.php'; //基础控制器类

12 require_once 'App/Controller/Home/UserController.class.php';

13

14 //实例化控制器

15 $userCtr = new UserController();

16

17 $a = !empty($_GET['a']) ? $_GET['a'] : 'login';

18

19 $userCtr -> $a();

入口文件引入类的修改

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

2 /**

3 * UserController.class.php 用户控制器

4 */

5

6 class UserController extends BaseController{

7 /**

8 * 展示登录界面

9 * @access public10 */

11 public function login()

12 {

13 include "App/View/Home/User/login.html";

14 }

15 。。。

16 。。。

17 。。。

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

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

2

3

4

5

登录

6

7

8

9 。。。

10 。。。

11 。。。

12

13

14 layui.use('form', function(){

15 var form = layui.form;

16 });

17

18

19

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值