本书未发布

5.1

未匹配的标注

快速入门

1.tp5.1 与tp5.0的区别

1. config配置 单独提取出来 并根据不同的功能创建对应的配置文件
2. 路由 单独的放置于 根目录 route/route.php
3. 核心的类库文件5.0使用了大量静态的关键字修饰,5.1非静态

2.tp5.1控制器

tp来说,contorller默认就是放在controller文件夹下
创建控制器的方式

  1. 命令创建
    php think make:controller app/index/controller/Admin
    解析: php 指定运行 think 这个文件 给它传递 make 指定创建的类型为 controller app/index/controller/Admin 为命名空间
  2. 控制器的访问
    默认的访问方式 path_info(即模块名/控制器名/方法名 )

    使用小技巧:如果不想在每次访问路径都写public/index.php 可以再跟目录下建立一个index.php文件 然后引入 public下的index.php

    <?php
    require 'public/index.php'
  3. 控制器的命名规范(驼峰命名法),访问路口会转成下划线 eg:AdminLogin =>admin_login,如果不想使用此规则可以在配置文件中修改

3.模式初步使用

DB 操作数据库

  1. 首先配置数据的链接,在config的database.php文件中
  2. 引入db 操作库 use think\Db
  3. 使用: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中的视图

  1. 视图创建与控制器关系
    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(垃圾回收机制)释放的
非静态会使用完就释放
一旦使用一个方法或成员,都会消耗一定的资源
不想消耗资源或空间,又想静态使用类中的方法就使用到门面

面门的好处:

  1. 解耦 把原本相互依赖的事物通过中间 的代理 相互调用
  2. 快速的实例化对象
  3. 可以静态的调用被代理类的方法

自定义门面的方法:

  1. 编写实际使用类

1.1 快速入门

  1. 建立代理类

1.1 快速入门

  1. 重写 getFacadeClass方法

1.1 快速入门

  1. 代理类静态调用相应的方法

1.1 快速入门

门面深入理解:

  1. 代理类静态调用实际类的方法
    1.1 快速入门
  2. 代理类因为没有改方法,所以会触发 facade类的__callStatic 方法
    1.1 快速入门
    3.通过createFacade方法创建实际被代理类的实例 (详细过程看注释)
    1.1 快速入门

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
Luson
讨论数量: 0
发起讨论 只看当前版本


暂无话题~