5.1
快速入门
1.tp5.1 与tp5.0的区别
1. config配置 单独提取出来 并根据不同的功能创建对应的配置文件
2. 路由 单独的放置于 根目录 route/route.php
3. 核心的类库文件5.0使用了大量静态的关键字修饰,5.1非静态
2.tp5.1控制器
tp来说,contorller默认就是放在controller文件夹下
创建控制器的方式
- 命令创建
php think make:controller app/index/controller/Admin
解析: php 指定运行 think 这个文件 给它传递 make 指定创建的类型为 controller app/index/controller/Admin 为命名空间 - 控制器的访问
默认的访问方式 path_info(即模块名/控制器名/方法名 )使用小技巧:如果不想在每次访问路径都写public/index.php 可以再跟目录下建立一个index.php文件 然后引入 public下的index.php
<?php require 'public/index.php'
- 控制器的命名规范(驼峰命名法),访问路口会转成下划线 eg:AdminLogin =>admin_login,如果不想使用此规则可以在配置文件中修改
3.模式初步使用
DB 操作数据库
- 首先配置数据的链接,在config的database.php文件中
- 引入db 操作库 use think\Db
-
使用:Db::table('表名'),例子如下:
// select 查询所有数据 二维数组 // $r= Db::table('goods')->select(); // find 查询单条数据默认是以id的方式查询 (一维数组) // 根据不同条件查询 where // 在日志文件中记入我们执行的sql /* 多条件查询的写法 where([ ['id', '=', 1], [ 'name',"=",'盒杏仁饼'], ['name',"=",'盒杏仁饼'] ]) ->where('id', '=', 3)->where('name', '=', '咖啡杏仁饼') 单条件的查询 where('id', '=', 3) or whereOr('name', '=', '咖啡杏仁饼')
model操作数据库
tp5.1提供抽象而快速的访问数据库
1.使用命令创建模型
php think make:model app\index\model\Goods
模型操作数据库原理:
thinkphp\library\think\model.php其实是对Db类的封装,所以model中也可以使用Db类中的方法;在model.php中__callStatic 在使用 静态方法类中不存在就会调用
如:
Goods::where()
在执行where方法时,会触发下面这个方法
public static function __callStatic($method, $args)
{
$model = new static();
return call_user_func_array([$model->db(), $method], $args);
}
在方法中通过
$model = new static(); 创建需要的子类模型
$model-db()方法 创建db类
call_user_func_array 执行 在这个类中不存的静态方法 =>where
4.mvc中的视图
- 视图创建与控制器关系
application\index\view\index\index.html
application\模块下面\view\对应控制器名(小写)\对应控制器中的方法名
2 模板渲染- 助手函数 View() //return view();
- $this->fetch('模块名’); //需要继承控制器Controller
如果在方法中没有传递参数 (视图名称)默认就会访问 对应模块下的\view\对应控制器名\方法名.html
需要访问同一个控制器的其他模块$this->fetch('模块名’);
控制器
$this->fetch('控制器名/模块名’);
3.数据传输到视图
第一步继承 控制器 think\controller
第二步调用控制器中的 使用 Controller->assign()
例子 :
$this->assign([
'name' => true,
]);
return $this->fetch();
//在视图中用 {$name} 接收
5.facade门面
门面的初步理解,以Config.php为例
位置:p\library\think\facade\Config.php
facade代理类 调用被代理类中的方法是
think\facade\config 是一个代理 ,代理对象是 think\config 在使用的时候可以通过代理类静态调用被代理类的方法
静态的成员是不会被CG(垃圾回收机制)释放的
非静态会使用完就释放
一旦使用一个方法或成员,都会消耗一定的资源
不想消耗资源或空间,又想静态使用类中的方法就使用到门面
面门的好处:
- 解耦 把原本相互依赖的事物通过中间 的代理 相互调用
- 快速的实例化对象
- 可以静态的调用被代理类的方法
自定义门面的方法:
- 编写实际使用类
- 建立代理类
- 重写 getFacadeClass方法
- 代理类静态调用相应的方法
门面深入理解:
- 代理类静态调用实际类的方法
- 代理类因为没有改方法,所以会触发 facade类的__callStatic 方法
3.通过createFacade方法创建实际被代理类的实例 (详细过程看注释)
推荐文章: