shop34-1-目录布局

存在项目的根目录 shop34

框架代码与应用程序代码划分

框架代码:

在各个应用程序间可以通用的代码。

应用程序代码:

当前项目的业务逻辑实现的代码。

分别创建两个子目录存储,框架与应用程序代码:

示例:框架内的代码:

入口文件在站点根目录

平台platform的划分

功能的聚合!

(也称为:模块module,分组group)

辨析:

前台,后台。

美工,程序。

需要将实例代码,作为测试test平台进行处理的话,应该为test平台建立平台子目录:

MVC层的划分

功能由MVC三部分实现的,因此将某个平台下,分成:

对当前平台下的 控制器,模型,视图 文件进行分别管理!

例如:

整体目录布局

Shop34/

Index.php入口文件

Application/应用程序目录

Front/前台

Back/后台

Test/测试平台

Model/模型

View/视图

Controller/控制器

Framework/框架代码目录

MySQLDB.class.php数据库操作类DAO类

Factory.class.php工厂类

Model.class.php基础模型类

Controller.class.php基础控制器类

shop34-2-运转-平台分发

运行起来

配置一个可以访问到shop34的虚拟主机:

Apache/conf/extra/httpd-vhost.conf

Apache restart

Hosts:

修改需要载入的文件路径

如果写相对路径,注意当前目录。

当前目录不是代码所在文件的目录(代码不是在文件中运行,而是在内存中)。

当前位置由浏览器所请求的脚本来确定(当前PHP处理脚本时,第一个处理的文件位置,被视为当前工作目录)。

可见,单入口程序,所有的相对地址,都是相对于入口文件地址而言的。

分发参数p,确定当前平台

URL:

测试平台比赛列表功能:

Index.php?p=test&c=Match&a=list

前台用户注册

Index.php?p=front&c=User&a=register

生成正确的URL:

入口文件index.php处理:

Tip:

分发参数共3个:

P:平台(目录)

C:控制器(类)

A:动作(方法)

shop34-3-自动加载实现

自动加载

总结:

控制器类(可增加)

模型类(可增加)

框架核心类(确定的)

对于所有的类,分成两方面考虑:

一:可以确定的类。(当自动加载方法确定时,类文件已经确定了)

二:可以被增加的类。(当自动加载方法确定时,没有办法确定)

对已经确定的类,采用最简洁的方式进行加载。

对于需要增加的类,需要通过类名 的规律,完成其位置的判断,进而完成自动加载。

规律是:

XXXController结尾的,控制器类,在当前平台下controller目录将其载入

XXXModel结尾的,模型类,当前平台下的model目录将其载入。

编码实现:

在入口中增加自动加载方法,并注册:

实现 userAutoload:

核心类加载:

可增加类(控制器,模型):

测试:

将项目所有对类文件的加载都删掉!

shop34-4-路径常量

目录地址常量

项目中,使用目录常量的形式,管理项目中所需要的地址,通过拼凑,连接操作形成某个位置。

使用目录常量

作为项目的初始化阶段,开始初始化目录常量:

先确定根目录,再拼凑确定子目录:

Index.php

Tip:函数 getCWD()可以用来获得当前工作目录。Current Working Directory

所有的涉及到文件地址的都有常量来完成:

php_mvc实现步骤六的更多相关文章

  1. 搭建vue开发环境的步骤,六步完成

    搭建vue开发环境的步骤,其实也挺简单的,之前这环境的配置也困扰着我一:在搭建vue的开发环境之前,一定一定要先下载node.js,vue的运行是要依赖于node的npm的管理工具来实现,下载地址:h ...

  2. php_mvc实现步骤九(登录验证码,退出-登录标记)

    shop34-17-登录验证码 验证码的分析 登录:防止暴力破解 论坛:防止灌水水 展示类:被抓取. 需要技术: 图片处理技术. 会话session技术. PHP图片处理技术 – GD 具体操作步骤 ...

  3. php_mvc实现步骤十

    shop34-19-商品添加 功能:添加商品表单 Index.php?p=back&c=Goods&a=add Controller-Action: 新建商品控制器类 Applicat ...

  4. php_mvc实现步骤八

    shop34-10-框架类 框架类(框架初始化类) 将原来入口文件中功能,放在该类中完成,入口文件变得简单,轻量! 将入口文件中的各个功能,由框架类的各个方法,完成: 为了简单化,使用纯静态的类.(看 ...

  5. php_mvc实现步骤七

    shop34-5-登录表单 登录功能分析 功能:登录表单 C控制器-动作 back后台admin控制器loginAction动作完成该功能. Application/back/controller/A ...

  6. php_mvc实现步骤五

    5.match_controller 控制器层典型实现 控制器类 依据功能的相关性,将一系列相关的功能,使用一个控制器类来处理,而该控制器的每个方法,就对因某个功能. 注意:控制器是按照功能划分的.( ...

  7. php_mvc实现步骤三,四

    3.match_mvc MVC 以ecshop的前台为例: 功能一: 首页 购物车数据,商品分类数据,其他的首页需要的数据 功能二: 拍卖活动 购物车数据,商品分类数据,拍卖相关数据 功能三: 团购商 ...

  8. php_MVC实现步骤二

    2.match_split 显示逻辑相分离 将功能强制分成两个部分,显示html文件,和逻辑PHP文件: 要求浏览器请求负责功能的PHP逻辑文件: 该PHP逻辑文件,对需要的显示内容进行载入. 逻辑P ...

  9. php_MVC实现步骤一

    1.Match 基本实现 功能,比赛列表,球队信息 数据表初始化: 比赛列表: 球队一 比分 球队二 比赛时间 韩国 1:2 澳大利亚 15-01-31 17:00 从SQL思考,如何完成上面的查询: ...

随机推荐

  1. PCA: PCA的具体实现过程

     数据预处理:mean normalization & feature scaling 先进行均值归一化(mean normalization),计算出每个特征的均值(uj),然后用xj-uj ...

  2. prefixfree.js和依托应用之Animatable

    http://www.zhangxinxu.com/wordpress/2011/11/css3-prefixfree-js-animatable/ http://leaverou.github.io ...

  3. c#语言学习笔记(1)

    环境:VS Express 2013 for Desktop 也可以vs社区版,不过学习的话,Express本版做一些小的上位机工具应该是够用了学习的网站:https://www.runoob.com ...

  4. Vue --- 基础指令

    目录 表单指令 条件指令 循环指令 分隔符(了解) 过滤器 计算属性 监听属性 冒泡排序 表单指令 使用方法: v-model 数据双向绑定 v-model绑定的变量可以影响表单标签的值,反过来表单标 ...

  5. SQL Server 父子迭代查询语句,树状查询

    这个也有用: -- Get childs by parent idWITH TreeAS( SELECT Id,ParentId FROM dbo.Node P WHERE P.Id = 21 -- ...

  6. 2019.12.11 java数组练习

    class AmHW { public static void main(String[] args) { /* 统计一个公司三个销售小组中每个小组的总 销售额以及整个公司的销售额.如下所示 第一小组 ...

  7. CLR如何将SEH异常映射到托管异常类型

    托管异常处理构建在Windows操作系统的结构化异常处理之上,通常称为SEH.这意味着CLR了解如何在SEH和托管异常系统之间进行互操作,这是一个非常关键的点,因为SEH基于异常代码的概念,而托管异常 ...

  8. WinDbg常用命令系列---显示当前异常处理程序链!exchain

    !exchain 这个!exchain扩展命令显示当前异常处理程序链. !exchain [Options] 参数: Options下列值之一: /c  如果检测到异常,则显示与调试C++ try/c ...

  9. 使用go-mysql-server 开发自己的mysql server

    go-mysql-server是一个golang 的mysql server 协议实现包,使用此工具我们可以用来做好多方便的东西 基于mysql 协议暴露自己的本地文件为sql 查询 基于mysql ...

  10. Nodejs仿Apache的部分功能

    一.初步实现Apache的部分功能 //1.加载模块 var http=require('http'); var fs=require('fs'); //2.创建server var server=h ...