学习教程来源于:
php中文网 ThinkPHP5 视频教程
ThinkPHP5.0完全开发手册
TP5基于MVC(模型-视图-控制器)方式来组织
Model(模型)<–Controller(控制器)–>View(视图)
模型与视图,用控制器强制分离,数据请求与展示由控制器统一调配!
模型:请求中用到的数据
视图:将数据展示给用户
URL访问默认采取PATH_INFO方式:
http://域名/入口文件/模块/控制器/操作/参数列表
入口文件(index.php)
1.入口文件是整个Web应用的起点;
2.入口文件最常用的是:index.php
;
3.入口文件并不唯一,例如可为后台单独设置入口文件:admin.php
;
4.入口文件可以通过URL重写功能将其隐藏;
应用(application)
1.应用是URL请求到完成的(生命周期)处理对象,由\think\App
类处理;
2.应用必须在入口文件(如:Index.php
)中调用并执行;
3.可为不同的应用创建多个入口文件,如后台入口:admin.php
;
4.应用有自己独立的配置文件(config.php
)和公共函数文件(common.php
);
模块(module)
1.一个应用下又多个模块,对应这应用不同部分,如前台、后台;
2.每个模块都可以有完整的MVC类库,创建和管理这些类库是我们最主要的工作;
3.每个模块可以有独立的配置文件(config.php
)和公共函数文件(commom.php
);
4.如果应用简单,可使用单模块模式thinkphp/convention.php
:'app_multi_module'=>false
,此时应用单模块模式
控制器(controller)
1.每个模块下可以有多个控制器负责响应URL请求;
2.每个控制器对应一个控制器类(class),如User.php
;
3.控制器管理者模型和视图,是系统资源的调度与分配中心;
4.ThinkPHP5的控制器不需要继承任何基类就可以工作;
操作(action)
1.操作对应着控制器类中的方法,是URl请求的最小单元;
2.任何的URl请求,最终都是由控制器中的操作方法来完成的;
3.操作时整个应用的最终执行单元,是URL路由的核心与目标;
在phpstudy环境下隐藏入口文件时需注意:
在入口文件同级目录下添加.htaccess
文件,内容如下:
htaccess文件 最后一句配置在 index.php后面加一个 ? ,方可成功
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>
模型(model)
1.模型通常对应整个应用,因此模型通常在应用(application目录下创建);
2.尽管模型主要是针对数据库进行CURD操作,但也可以不操作数据库;
3.模型通常完成试剂的业务逻辑和数据封装,并返回和格式无关的数据;
4.模型返回的数据,通常是数组(array)或字符串(string)
5.模型支持分层操作,例如将模型层分为逻辑层/服务层/事件层
视图(view)
1.控制器调用模型返回的数据,是通过视图转换成不同格式输出的;
2.视图根据请求,调用模板引擎确定是直接输出还是模板解析后再输出
3.视图由大量的模板文件组成,这些文件对应着不同的控制器中的操作方法
4.模板目录是可以动态设置的;
5.视图最直观的理解,就是由一系列的HTMl文件组成的;
TP5的生命周期
入口文件->引导文件->注册自动加载->注册错误和异常机制->
应用初始化->URL访问检测->路由检测->分发请求->响应输出->
应用结束
1.入口文件
①文件名:index.php
;
②位置:public/index.php
;
③用户通过入口文件发起服务请求,是整个应用的入口与起点;
④任务:定义常量,加载引导文件,不要放任何业务处理代码;
⑤代码:
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
2.引导文件
①文件名:start.php
②位置:thinkphp/start.php
③执行流程:
加载常量->加载环境变量->注册自动加载->注册错误与异常
->加载惯例配置->执行应用
3.注册自动加载
①类方法:Loader::register();
②作用:将所有符合规范的类库(包括Composer依赖加载的第三方类库)自动加载;
③执行流程:
注册自动加载方法:\think\Loader::autoload->注册系统命名空间->加载类库映射文件->注册Composer自动加载->注册extend扩展目录
4.注册错误和异常机制
执行Error::register()注册错误和异常处理机制。
①应用关闭方法:think\Error::appShutdown
②错误处理方法:think\Error::appError
③异常处理方法:think\Error::appException
5.应用初始化
严格意义上讲,前面的内容都可算做应用初始化:
加载公共配置->加载公共扩展配置->加载应用状态配置->
加载别名定义->加载行为定义->加载公共函数文件->
注册应用命名空间->加载扩展函数文件->设置默认时区->
加载系统语言包
6.URL访问检测
URL必须是PATH_INFO格式才允许继续允许:
①PATH_INFO标准格式:
http://域名/index.php/模块名/控制器名/操作名/参数键值对
举例:http://tp5.com/index.php/index/user/add/id/10/name/peter
②PATH_INFO兼容格式:
http://域名/index.php?s=/模块名/控制器名/操作名&参数键值对
举例:
http://tp5.com/index.php?s=index/user/add&id=10&name=peter
7.路由检测
①如果开启了url_route_on参数,则首先进行URL路由检测;
②一旦检测到匹配的路由,根据路由规则会注册到相应的URL调度;
③TP5支持的路由规则如下:
路由到模块/控制器/操作;(默认)
路由到外部重定向地址;
路由到控制器方法;
路由到闭包函数;
路由到类的方法;
8.分发请求
①将用户请求分发到对应的路由地址,完成应用的业务逻辑并返回数据;
②统一使用return
返回数据,不要用echo直接输出;
③如非必要,请不要使用exit
或者die
中断执行;
④分发请求支持TP5的物质路由地址模式;
9.响应输出
①控制器正常返回的数据通常是:字符串(String)或数组(Array)格式;
②统一使用return返回数据,而不是直接输出,这样可以自动调用REsponse::send()
方法将最终的返回数据输出到页面或者客户端,并自动转换成default_return_type
参数配置的格式(XML,JSON等)。
10.应用结束
①响应输出完成后,应用生命周期基本结束,生成日志报告
②日志包括俩部分:用户调试输出和系统自动生成;
③日志在应用结束后,自动写入。
入口文件
1.定义框架路径、项目路径(可选)
2.定义系统相关常量(可选)
3.载入框架入口文件(必须)
文件内容:
<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
应用的入口文件默认在:public/index.php
public目录为Web可访问目录,其他的文件都可以放到非web访问目录下面
多入口文件
①一个应用通常只有一个入口文件,但也不是绝对的;
②例如为后台创建单独入口文件:admin.php
,与admin模块绑定;
③多入口文件,可以使应用项目层次更加清晰,管理更加灵活。
TP5支持的URL模式
1.传统模式(已经不再支持,请不要使用)
http://tp5.com/index.php?m=Index&c=User&a=del&id=15
2.PATH_INFO:(推荐方式
)
http://tp5.com/index.php/index/user/add/id/15
3.兼容模式
①参数以传统方式传入
http://tp5.com/index.php?s=index/user/add&id=15
②参数以PATH_INFO方式传入
http://tp5.com/index.php?s=index/user/add/id/15
URL大小写问题
1.默认情况下,URL是不区分大小写的;
2.URL里面的模块/控制器/操作名会自动转换为小写;
3.控制器再最后调用的时候会转换为驼峰法处理;