框架基础
4.1、目录结构【重点】
https://www.kancloud.cn/manual/thinkphp5_1/353950
runtime目录在linux和mac下面一定要设置可写的权限
重点的目录和文件
application 应用目录 mvc 所在的目录,业务代码所写的目录
application/common 公共模块目录
application/common/model 公共模块中的模型
config/app.php 应用的主配置文件
route/route.php 路由文件
public 虚拟主机指向的目录 public/static 静态文件所在的目录 可以删除
thinkphp 框架核心目录,不要修改
vendor composer 下载的第三方类库 composer管理的
composer.json 文件 composer针对于此项目的配置文件
think 命令行文件 php think
4.2、thinkphp命名规范
https://www.kancloud.cn/thinkphp/php-fig-psr/3141
4.3、请求的生命周期
框架的生命周期,也就是请求的执行流程:
五、路由
什么是路由
将用户的请求按照事先规划的方案提交给指定的控制器和方法来进行处理。
Thinkphp框架提供了两种路由规则
- pathinfo模式
- 自定义路由规则【推荐】
进而可以让URL更规范以及优雅,提高网站的安全和网站URL访问的友好度。
Route类注册使用think\facade\Route类静态调用 think\Route.php
注:ThinkPHP5.1的路由定义更加对象化,并且默认开启路由(不能关闭),如果一个URL没有定义路由,则采用默认的PATH_INFO 模式访问URL。
###5.0、隐藏index.php文件
打开apache重写模块配置虚拟主机中允许重写
在入口文件中要有.htaccess文件
重启apache服务,让配置生效。访问时就可以不用带index.php文件了。
5.1、路由相关配置
强制路由
在config/app.php配置文件中设置
'url_route_must' => true,
注:将开启强制使用路由,这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。
路由缓存
对于路由规则较多的应用可以大幅提升路由性能(仅部署模式有效)
'route_check_cache' => true,
注:如果路由定义中,有某个路由规则的路由地址使用了闭包的方式,那么路由缓存将会失效。
完全匹配
'route_complete_match' => true,
5.2、定义路由
路由文件的位置:项目目录/routes/route.php文件中进行如下格式的定义
Route::请求方式('路由表达式',匿名函数);
Route::请求方式('路由表达式','[@]模块名/控制器名/方法名'); # 后讲到控制器时使用
注:给控制器方法设置好了请求的路由规则后,原来的pathinfo请求则失效,请求就会报异常,只能通过自定义路由规则来请求
5.3、请求类型
Route::get('new/:id','News/read'); // 定义GET请求路由规则 查询
Route::post('new/:id','News/update');// 定义POST请求路由规则 添加
Route::put('new/:id','News/update'); // 定义PUT请求路由规则 修改
Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则 删除
Route::any('new/:id','News/read'); // 所有请求都支持的路由规则 框架提供 不推荐
测试定义好的请求路由规则类型,使用postman软件来测试
5.4、路由参数
# 必填参数
Route::请求方式('路由表达式/:参数',匿名函数);
# 可选参数
Route::请求方式('路由表达式/[:参数]',匿名函数);
效果
5.5、路由分组
路由分组功能允许把相同前缀的路由定义合并分组,这样可以简化路由定义,并且提高路由匹配的效率。
Route::group('分组名(字符串)或者分组路由参数(数组)','分组路由规则(数组或者闭包)');
Route::group('blog', function () {
Route::get(':id', 'read');
Route::post(':id', 'update');
Route::delete(':id', 'delete');
})->pattern(['id' => '\d+']);
# 分组的嵌套
Route::group(['method'=>'get'], function () {
Route::group('blog',function(){
Route::get(':id', 'read');
Route::post(':id', 'update');
Route::delete(':id', 'delete');
});
})->pattern(['id' => '\d+']);
aa为分组的名称,可以在路由前面添加,prefix为分组的前缀,省略index前台,index控制器,直接写方法;
六、控制器
6.1、控制器的后缀
打开配置文件application/app.php,有如下配置
'class_suffix' => false,
# 表示默认情况下,控制器无特殊后缀。例如 Index控制器,文件名为Index.php
如果需要进行设置,可以设置为
'controller_suffix' => 'Controller',
# 表示控制器以Controller为后缀。例如Index控制器,文件名为IndexController.php
注:一般不建议进行修改,保持默认,框架默认给我们的配置。
6.2、使用命令行创建分组
php think build --module 分组名称 //在phpstorm中,鼠标点击根目录 右键 在终端中打开
6.3、创建控制器
创建控制器的方式有两种:
手动创建
application/模块目录/controller/目录下
命名规则:控制器名称(首字母大写) + (控制器后缀,默认没有) + .php
命令行方式创建【推荐】
php think make:controller --plain 模块名/控制器名 //加上plain文件内容没有补充全,没有具体的方法
//在phpstorm中,鼠标点击根目录 右键 在终端中打开
参数说明
–plain 标准控制器 (默认创建的控制器是一个资源控制器,所以一般加上此选项)
如果创建时,没有在模块名称,则默认创建到公共模块中 【common】
php think make:controller 模块名/控制器名
//在phpstorm中,鼠标点击根目录 右键 在终端中打开
6.4、开启调试模式
默认情况下,错误描述比较模糊,不方便进行错误调试。这种模式通常叫做“部署模式”。
开发阶段可以将框架设置为调试模式,便于进行错误调试:
修改项目目录 config/app.php文件
实际开发中,使用第2种方案
6.5、前置操作
可以为某个或者某些操作指定前置执行的操作方法,设置 beforeActionList属性可以指定某个方法为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法。
6.6、页面跳转
在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面。系统的\think\Controller类内置了两个跳转方法success和error,用于页面跳转提示。
此方法可根据不同的请求方式http标准请求还是ajax请求会自动返回数据(html/json)