模板布局
第一种方式:全局配置方式
1.开启全局配置中配置
'template' => [
'layout_on' => true,
'layout_name' => 'layout',
'layout_item' => '{__REPLACE__}' 自己定
]
2. 首先会渲染 application/index/view/layout.html 模板
layout中
3.适合头尾都一样的,替换原理
模板路径替换
调试
1.未雨绸缪 页面Trace
'app_trace' => false, 看右下角的追踪, 看sql语句调试
Trace设置 开启 app_trace 后 有效,可以为了不挡住页面方console中
'trace' => [
// 内置Html Console 支持扩展
'type' => 'Html',
],
在方法中可以用 trace(‘’调试内容) 来调试
2.异常页面
应用调试模式
'app_debug' => false, 开起来可以看到错误的目录,上线务必改成false
3.断点调试
- 就是用dump()
- 就是用halt() 这个像exit 不会继续打印了
4.日志分析
引入 use think\Log;
API接口
移动端访问和网页访问没有什么区别,只是移动端返回的一般是JSON数据
平时怎么写模型,现在就怎么写。一张表对应一个模型,模型是公用的
扩展(公共类)
在extend中新建org\util文件夹,在里面建一个类 ArrayList,然后其他地方要用就引入,命名空间不要在extend开头了.一般是和项目没什么关系的。,有关系的类放 use app\common\util\Myclass;
驱动
一旦报错就会log::error,然后就调用配置的这个类
验证码类
自己下载
composer require topthink/think-captcha
配置、验证
文件上传类
多图就是一个循环,如果是图片就加验证
图片处理类
composer require topthink/think-image
引入下载的use think\Image;
路由
为什么要路由?
1.友好SEO,SEO最多只能抓三层目录
2.安全性
定义路由两种方式
但是这种当多个参数时,一样很长,需要改一下配置文件中的'pathinfo_depr'=> '-', 分隔符,这样就全部相当于一个页面 hello-hello-dfasd-asdf.html 打印出 Array ( [name] => hello [dfasd] => asdf );
也可以路由配置 'today/[:year]/[:month]' =>['index/index/today',['method'=>'get'],['year'=>'\d{4}','month'=>'\d{2}']],
路由模式:
- 普通模式:完全使用默认的 PATH_INFO 方式URL,平常访问显示
- 混合模式:并使用路由定义+默认 PATH_INFO 方式的混合
- 强制模式:url_route_on和url_route_must 都设置成true
在配置文件config中
'url_route_on' => true, // 是否开启路由
' url_route_must' => false, // 是否强制开启路由
1.路由规则中 包含变量的 就是动态路由,没有包含任何变量的称为静态路由.
2.在路由文件中 return数组的 路由形式, 称之为 静态注册
3.使用Route类的方法(引入Route类) 注册的路由 称之为 动态注册(TP5.0推荐) 以上两者 可同时使用.
路由定义采用 \think\Route 类的 rule 方法注册, 通常是在应用的路由配置文件:route.php中配置
// 动态注册
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
//GET 一旦你对某个规则设置了路由,则之前的PATH_INFO方式访问失效
Route::get('home', 'index/index/index');
//POST 这个在url 网址中不好测试了,用老师给的一个工具Postman
Route::post('ppp', 'index/index/ppp');
//所有都通用
Route::rule('ooxx', 'index/index/index');
4.路由表达式参数
// 无参 tp5.com/user
// Route::get('user', 'index/index/user');
// 必传 tp5.com/user/156
// Route::get('user/:id', 'index/index/user'); 还有可选与匹配 请参考手册
// 普通路由,只要定义了这个路径,就必须按路由的url来访问 比如 tp5.com/url
Route::get('url', 'index/index/url');
// RESTful资源路由 默认生成7个对应的资源路由
Route::resource('stu', 'admin/Stu'); //用这个定义是否用路由,定义的控制器必须用路由7个方法来操作
'url_convert' => false,
URL的统一规格是全部小写,这个设置的作用就是如果你不想转化成也可以。
比如方法名是:IndexHome,在访问的url中需要写成Index_Home,否则找不到(自己写时),TP框架内不需要考虑这个问题,自动处理功能。
RESTful资源控制器
更加智能,只要你按它的方法写参数,它自己可以分辨出是什么方式,但是只能写这7个方法
RESTful资源路由 默认生成7个对应的资源路由
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
// RESTful资源路由 默认生成7个对应的资源路由
Route::resource('stu', 'admin/Stu');
public function index()
{
// 查询数据 和之前的增删改查不会干扰,但是推荐使用这种方式
$list = Db::table('user')->field(['id', 'name'])->order(['id' => 'aes'])->select();
// var_dump($list);
1.之前查好之后放入V层的方式
// $this->assign('list', $list);
// $this->assign('title', '用户列表');
// return $this->fetch('index'); //tp5中返回到视图层
// 助手函数 现在查好之后放入V层的方式
2助手函数
return view('Stu/index', [
'title' => '用户列表',
'list' => $list,
]);
3 判断执行情况
if ($result > 0) {
return $this->success('添加成功', url('admin/stu/index'));
return $this->redirect('/index/Index') ;
} else {
return $this->error('添加失败');
}
ajax操作删除时获取ID
<button class="btn btn-danger btn-xs del-btn" data-id="{$v['id']}">删除</button>
<a href="{:url('Admin/Stu/index')}" class="btn btn-default">用户列表</a>
<a href="{:url('Admin/Stu/create')}" class="btn btn-default">添加页</a>
请求
- 如果要获取当前的请求信息
- 引入 \think\Request 类
- 实例化 $request = Request::instance(); 或者 助手函数request();
- 取值
tp5框架学习笔记总结一
tp5框架学习笔记总结二