2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
真实项目开发步骤:
- 多人同时开发项目,协作开发项目、分工合理、效率有提高(代码风格不一样、分工不好)
- 测试阶段
- 上线运行
- 对项目进行维护、修改、升级(单个人维护项目,十分困难,代码风格不一样)
- 项目稳定的运行阶段
- 项目停止运行(旧项目的人员已经全部离职,新人开发新项目)
问题:
1. 多人开发项目,分工不合理,(html php mysql)
2. 代码风格不一样,后期维护十分困难
3. 项目生命周期十分短,项目生命没有延续性,造成资源浪费、人员浪费
4. 项目不能很好适应客户需求,牵一发而动全身。
其他相关框架
1. zendframework zend php语言公司发布的官方框架,重量级(功能多)
2. yii 美国华人开发的框架,xue qiang, qiang, 重量级框架,纯OOP框架
3. CI CodeIgniter 轻量级框架,开发速度快,部署灵活
- cakephp 外国框架,重量级,速度慢
- symfony 外国重量级框架
- ThinkPHP 轻量级框架,国人框架,入门容易
什么是框架:
一堆代码的集合,里边有变量、函数、类、常量,里边也有许多设计模式MVC、AR数据库、单例等等。
框架可以节省我们50-60%的工作量,我们全部精力都集中在业务层次。
为什么使用框架
l 框架可以帮助我们快速、稳定、高效搭建程序系统
l 该系统由于框架的使用使得本身的维护性、灵活性、适应客户需求方面得到最大化的增强。
l 使用框架的过程中可以使得我们的注意力全部集中业务层面,而无需关心程序的底层架构。
thinkphp : 基于MVC模式的 面向对象 轻量级 php开发框架
下载地址:thinkphp.cn Thinkphp3.2.3完整版 完善
1,根文件夹下的 thinkphp文件夹是 核心文件夹 里面的内容适用于全局 不能任意修改
2,Application 文件夹是项目文件夹
3, 与Application 文件夹同目录的index.php 是入口文件 访问都是从此进入
【使用框架】
thinkphp.cn

thinkphp 3.2版本




【框架项目部署】
部署一个Shop项目,使用tp框架
步骤:
创建入口文件:
- 在ThinkPHP目录下创建一个入口文件index.php

2.访问入口文件的同时系统会自动把对应的应用目录文件Shop创建出来

3.打开Home文件夹

【MVC模式】
M:Model 数据模型层,负责数据操作
V:View 视图层,负责显示视图
C:Controller 控制器,实现业务逻辑

【控制器访问及路由解析】
通过url地址get参数找到指定的控制器,并进行对应方法调用请求
http://网址/index.php?m=模块名称&c=控制器&a=方法
以上url地址信息代码不够优雅、不安全。
tp框架url地址可以由以下四种
- http://网址/index.php?m=XX&c=XX&a=XX 基本get模式
- http://网址/index.php/模块/控制器/操作方法 路径模式pathinfo
- http://网址/模块/控制器/操作方法 rewrite重写模式
- http://网址/index.php?s=/模块/控制器/方法 兼容模式
具体url地址模式设置(配置文件ThinkPHP/Conf/convertion.php)
URL_MODEL = 0/1/2/3 分别代表四种url地址模式

config.php是我们当前自己项目的配置文件,我们可以通过修改该文件达到配置变量的目录
这个文件在系统运行过程中会覆盖convertion.php的配置变量
include “convertion.php”;
include “config.php”; 后引入的文件要把先引入的文件配置变量给覆盖掉
我们系统有兼容4中url地址模式的使用
系统有的时候会自动创建url地址,它会根据当前模式进行url地址创建使用
快捷函数 U(); 创建url地址

通过url地址模式我们学习到了以下内容:
- 我们学习到了配置变量(核心配置变量conversion.php、当前应用配置变量config.php)
- 快捷函数U(“模块/控制器/方法”) 根据参数和url模式 创建对应的url地址
- 把框架的模式调整为开发调试模式
【开发、生产模式】
开发调试模式:系统需要加载大概24个文件 index.php define(“APP_DEBUG”,true);
生产模式:系统只需要加载很少的大概7个文件 在入口文件
index.php中定义: define(“APP_DEBUG”,false);
节省了许多文件的开发、关闭的系统开销,节省资源

要在页面显示trace信息,需要在自己的配置文件中:

【控制器和对应方法创建】
控制器是MVC模式中的核心,tp默认有一个Index控制器:

Index控制器里面有一个操作方法:Index

我们在访问http://localhost:8080/Thinkphp/index.php入口文件的时候,会默认访问Index控制器下面的Index方法 注意8080 为端口号
如果要自己创建一个控制器Login:
- 在\Shop\Home\Controller文件夹下新建一个控制器文件LoginController.class.php
注意:文件命名规则,按照驼峰法命名

2.打开该文件,在里面造控制器Login类

3.如果要自定义操作方法,在控制器Login类里面加一个函数Login():

这样我们就完成了控制器和操作方法的建立,如果要访问我们刚才的Login控制器下的Login方法:

4.控制器中如果要调用视图层中的模板:

这样再次访问,会发现报错:

原因:模板文件没有创建,这时候我们就要去创建模板文件
【视图模板文件创建】
视图模板文件存放发位置在:

里面没有模板文件
如果我们想要访问Login控制器中的Login方法,首先我们要创建一个Login控制器对应的模板文件夹,该文件夹就对应着Login控制器:

然后在Login文件夹下再创建一个login.html的模板文件来对应Login控制器下的Login方法:

在login.html里面写入要显示的代码:

然后再次请求:

【url地址大小写设置】
默认是不敏感的:
在config.php里边对url大小写敏感进行设置

【空操作和空控制器处理】
空操作:就没有指定的操作方法
空控制器:没有指定控制器
http://网址/index.php/Home/User/login
http://网址/index.php/Home/User/hello 空操作
http://网址/index.php/Home/beijing/login 空控制器
空操作:

一般网站处于安全考虑不给用户提示任何错误信息
“空操作”本质意思:一个对象(控制器)调用本身不存在的方法
在OOP里边,对象调用本身不存在方法,处于用户体验比较好的角度考虑,我们可以在类里边制作一个魔术方法:function __call();
在tp里面控制器的父类:

父类中有个方法:

所以空操作有两种解决方案:
① 在对应的控制器里边制作一个方法,名称为”_empty”,这个控制器的空操作都会自动执行该方法。(推荐使用)
② 给空操作的名称制作一个同名的模板出来,系统会自动调用


空控制器:

空控制器:在实例化控制器对象的时候,没有找到指定的类
什么时候实例化控制器对象:ThinkPHP/Library/Think/App.class.php
熟记文件:
index.php 入口文件
ThinkPHP/ThinkPHP.php 框架核心文件
ThinkPHP/Library/Think/Think.class.php 框架核心文件
ThinkPHP/Library/Think/App.class.php 框架应用文件
在App.class.php内部包括控制器对象创建,以及对象调用指定的方法呈现内容:

空控制器处理方案:可以再制作一个控制器,名称EmptyController.class.php
在该控制器内部其实只需要制作一个_empty()方法即可。


这样再次请求:

【项目分组】
系统有前台用户操作界面
系统还有后台供公司内部人员使用维护平台
两者在使用的过程中就是对“控制器”、“视图模板”、“model模型”的操作
为了系统开发方便,及代码部署更加合理,我们的控制器、view视图等前后台文件不要混在起,要在物理结构上给分开


http://网址/index.php/Home/控制器/操作方法 访问Home控制器及制定操作
http://网址/index.php/Admin/控制器/操作方法 访问Admin分组的控制器和操作方法
2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组的更多相关文章
- Thinkphp空操作空模块
空操作和空模块很有实用意义,他有些类似于PHP虚拟机自定义的404页面,利用这个机制我们可以更好的实现URL和错误页面的一些优化. 一.空模块: 很好理解,就是当你执行不存在模块的 ...
- tomcat相关配置技巧梳理 (修改站点目录、多项目部署、限制ip访问、大文件上传超时等)
tomcat常用架构:1)nginx+tomcat:即前端放一台nginx,然后通过nginx反向代理到tomcat端口(可参考:分享一例测试环境下nginx+tomcat的视频业务部署记录)2)to ...
- 在eclipse中maven web项目部署到tomcat,访问不了
修改eclipse中tomcat发布路径后,能正常访问
- 解决SpringBoot项目部署到服务器后访问Tomcat后404,无法访问Controller
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--路由限制及选择篇(2/8)【route】
文章目录 前情概要 上文中的RouteHandler中有一个重要方法GetActionDescriptor没有贴代码和说,接下来我们就说一说这个方法. 使用controllerName.actionN ...
- TP框架 ---空控制器和空操作
通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控 ...
- TP框架基础 (二) ---空控制器和空操作
通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控 ...
- Thinkphp 空操作、空控制器、命名空间
1.空操作 空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. http://网址/index.php/Hom ...
- ThinkPHP - 空模块+空操作
空操作 空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. 例如,下面我们用空操作功能来实现一个城市切换的功能 ...
随机推荐
- ssh服务介绍
基本介绍 ssh:安全的远程登陆 要有客户端与服务器端,客户端主动链接服务端,那么服务端地址是不能变的. socket:套接字 标识应用唯一的地址 tcp/udp port端口号 cat /etc/s ...
- ES6中Generator
ES6中Generator Generator是ES6一个很有意思的特性,也是不容易理解的特性.不同于let/const提供了块级作用域这样明显的目的,这玩意儿被搞出来到底是干嘛的? 首先我们需要明确 ...
- Python-集合数据类型内置方法
集合内置方法(必考) 用途:用于关系运算的集合体,由于集合内的元素无序且集合元素不可重复,因此集合可以去重,但是去重后的集合会打乱原来元素的顺序. 定义方式:{}内用逗号隔开多个元素,元素只能是不可变 ...
- Android获取屏幕大小(Px)
private DisplayMetrics dm = new DisplayMetrics(); TextView tv; Button bu; @Override protected void o ...
- POJ 1905 Expanding Rods (求直杆弯曲拱起的高度)(二分法,相交弦定理)
Description When a thin rod of length L is heated n degrees, it expands to a new length L' = (1+n*C) ...
- 0元免费领《JAVA日志》教程,天啦噜!
天啦,老码疯了!辛辛苦苦,费心费力准备的<java日志实战及解析>教程真的不要钱了吗? 作为添物网的小编,每天看着老码为了给大家录制课程,加班加点的做课件,为了保证课程的质量,老码一遍又一 ...
- HDU-1858-Max Partial Value I,有坑点,不难;
Max Partial Value I Time Limit: 1000/5000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Othe ...
- html template & import link bug
html template & import link bug html templates is OK https://caniuse.com/#search=html%20template ...
- poj 2081 简单递推
#include<stdio.h> #include<string.h> #define N 510000 int dp[N]; int f[10000000]; int ma ...
- 2016 年末 QBXT 入学测试
P4744 A’s problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算一次成绩.参与享优惠 描述 这是一道有背 ...