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. finall语句是在return语句执行前被执行还是执行后被执行?

    finally对try...catch的影响和执行时间 一.finally语句不被执行的两种情况 我们在学习抛出异常的时候学习到了finally语句块,这个语句块一般会被执行,但是有两种情况下不被执行 ...

  2. MySQL 日期格式化,取年月日等相关操作

    日期取年.月.日 select id, phone,time,year(time),month(time), DAY(time),TIME(time) from user where phone='x ...

  3. C# 跨线程对控件赋值

    第一种 跨线程对控件赋值 private void button2_Click(object sender, EventArgs e) { Thread thread1 = new Thread(ne ...

  4. Android学习小结

    自从学习Android以来已经经过三个月了,如今市场对于Android工程师的需求接近饱和,所以学习Android的人也少了很多,很多的培训机构也逐渐将Android课程淘汰,导致学习Android的 ...

  5. Java web开发——文件的上传和下载

    一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...

  6. WinDbg常用命令系列---.effmach

    .effmach (Effective Machine) .effmach命令显示或更改调试器使用的处理器模式. .effmach [MachineType] 参数: MachineType指定调试器 ...

  7. a list of frequently asked questions about Circus

    转自:https://circus.readthedocs.io/en/latest/faq/,可以帮助我们了解circus 的使用,以及问题解决 How does Circus stack comp ...

  8. hasura skor 一个pg 的event trigger 扩展

    hasura skor 是一个hasura 团队早期的event triggerpg 扩展,新的推荐使用graphql engine 参考架构 缺点 只有在skor 运行的时候,数据才可以被捕捉处理 ...

  9. ubuntu 基于windows

    windows10下的ubuntu子系统 wsl windows server linux ubuntu在微软商店可下载,安装好之后配置一个用户名和密码,默认的root用户时没有密码的.需要使用roo ...

  10. [codewars] - int32 to IPv4 二进制十进制 ip地址转换

    原题 https://www.codewars.com/kata/int32-to-ipv4/train/java Take the following IPv4 address: 128.32.10 ...