1、ThinkPHP目录结构
重点目录和文件
application-------------------业务代码(MVC所在目录)
config------------------------配置文件
public------------------------应用web虚拟主机指向的目录
route-------------------------路由定义目录
runtime-----------------------框架自动生成的目录(在Linux中要设置可写权限)
thinkphp----------------------thinkphp核心代码
vendor------------------------第三方类库
composer.json-----------------composer配置文件
think-------------------------think提供的命令行工具
2、thinkphp命名规范
1、目录使用小写加下划线2、类的文件名以命名空间定义,且命名空间的路径和类库文件所在目录一致
3、方法和属性命名使用驼峰命名法
4、常量以大写字母加下划线命名
5、配置参数以小写字母加下划线命名
6、环境变量定义以大写字母加下划线命名
7、数据表和字段采用小写加下划线命名
3、路由
3.1路由介绍
thinkphp有两种路由规则1、pathinfo模式
2、自定义路由模式
如设置了自定义路由,则使用自定义路由的方式访问,如没有设置自定义路由,则默认使用pathinfo模式访问
3.2隐藏index.php文件
1、打开apache的重写模块LoadModule rewrite_module modules/mod_rewrite.so
2、虚拟主机中允许重写
<VirtualHost *:80>
# 设置网站目录
DocumentRoot "${INSTALL_DIR}/www/tp5.1/public"
# 设置网站域名
ServerName www.tp.com
# 错误日志
ErrorLog "${INSTALL_DIR}/www/tp5.1/logs/error.log"
# 成功日志
CustomLog "${INSTALL_DIR}/www/tp5.1/logs/access.log" combined
# 设置目录访问权限
<Directory D:/wampserver/www/tp5.1/public>
# 指定目录启用
Options Indexes FollowSymLinks
# 是否允许使用.htaccess文件
AllowOverride All (更改此处)
# 访问目录权限
Require all granted
</Directory>
</VirtualHost>
3、修改入口文件(public/.htaccess)
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
3.3路由相关配置
1、强制路由 在config/app.php中配置文件中设置'url_route_must' => true,
//会强制使用路由,这种方式下面必须严格给每一个访问地址定义路由规则
2、路由缓存
'route_check_cache' => true
//开启后会提高性能,但在开发阶段不要开启
3、完全匹配
'route_complete_match' => true,
3.4定义路由
3.4.1 路由格式Route::请求方式(‘路由表达式’,function());
or
Route::请求方式(‘路由表达式’,‘模块名/控制器名/方法名’);
//定义好路由控制后,原pathinfo就失效了
Route::请求方式(‘路由表达式’,‘模块名/控制器名/方法名’) -> name('name');
//为路由设置别名
3.4.2 请求类型
Route::get(); // 定义GET请求路由规则 查询
Route::post(); // 定义POST请求路由规则 添加
Route::put(); // 定义PUT请求路由规则 修改
Route::delete(); // 定义DELETE请求路由规则 删除
Route::any(); // 所有请求都支持的路由规则 框架提供 不推荐
3.4.3 路由参数
//必选参数
Route::请求方式(‘路由表达式/:参数’,匿名函数);
//可选参数
Route::请求方式(‘路由表达式/[:参数]’,匿名函数);
例:
Route::get('path/[:name]',function($name){
return 'my name is '.$name;
});
3.5路由分组
Route::group('group_name',function(){
Route::get('name1','path1');
Route::post('name1','path1');
Route::delete('name1','path1');
})
//分组路由嵌套
Route::group(['method' => 'get'],function(){
Route::group('group_name',function(){
Route::get('name1','path1');
Route::post('name1','path1');
Route::delete('name1','path1');
})
})
4、控制器
4.1、相关配置
'controller_suffix' => false,
// 表示默认情况下,控制器无特殊后缀。例如 Index控制器,文件名为Index.php
'controller_suffix' => 'Controller',
// 表示控制器以Controller为后缀。例如Index控制器,文件名为IndexController.php
4.2命令行创建分组和控制器
php thinlk bulid --moudle name //创建分组
php think make:controller --plain module_name/controller_name //创建控制器
4.3、开启调试模式
方法一:'app_debug' => true,
方法二:(推荐方法)
在根目录创建.vue文件
APP_DEBUG=true
4.4、前置操作
设置beforeActionListh属性可以指定某个方法作为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置操作public $beforeActionList = [
'before' => ['fun1','fun2'];
]
public function before(){
return 'I'm before';
}
public function fun1(){
return 'I'm fun1';
}
public function fun2(){
return 'I'm fun2';
}
4.5、页面跳转
thinkphp的 \think\controller 类内置了两个跳转方法success和error,用于页面跳转提示。public function fun(){
return $this -> success('success',url('route '));
}