thinkphp 5.1 部分知识记录<一>

发布于:2025-06-02 ⋅ 阅读:(29) ⋅ 点赞:(0)

1、配置基础

惯例配置->应用配置->模块配置->动态配置

  • 惯例配置:核心框架内置的配置文件,无需更改。
  • 应用配置:每个应用的全局配置文件(框架安装后会生成初始的应用配置文件),有部分配置参数仅能在应用配置文件中设置。
  • 模块配置:每个模块的配置文件(相同的配置参数会覆盖应用配置),有部分配置参数模块配置是无效的,因为已经使用过。
  • 动态配置:主要是指在控制器或者行为中进行(动态)更改配置,该配置方式只在当次请求有效,因为不会保存到配置文件中。

只能应用配置中设置参数如下:

配置参数 描述
app_debug 应用调试模式(支持环境变量配置)
app_trace 应用trace(支持环境变量配置)
class_suffix 类后缀
default_filter 默认过滤机制
root_namespace 根命名空间
pathinfo_depr PATH_INFO分隔符
url_route_must 路由强制模式
auto_bind_module 自动绑定模块
default_lang 默认语言
lang_switch_on 多语言切换

只能环境变量中修改的参数如下:

配置参数 描述
app_namespace 应用命名空间
config_ext 配置文件后缀

2、架构总览

  • 入口文件
  • 应用
  • 路由
  • 模块
  • 控制器
  • 操作(方法)
  • 模型
  • 视图
  • 板引擎
  • 驱动
  • 行为
  • 中间件
  • 事件
  • 助手函数

3、环境变量

5.1版本取消了所有的系统常量,原来的系统路径变量改为使用Env类获取(需要引入think\facade\Env):

// 获取应用目录(不区分大小写)
echo Env::get('app_path');
// 或者
echo Env::get('APP_PATH');

支持获取的系统路径变量包括:

系统路径 Env参数名称
应用根目录 root_path
应用目录 app_path
框架目录 think_path
配置目录 config_path
扩展目录 extend_path
composer目录 vendor_path
运行缓存目录 runtime_path
路由目录 route_path
当前模块目录 module_path
系统路径 Env参数名称
应用根目录 root_path
应用目录 app_path
框架目录 think_path
配置目录 config_path
扩展目录 extend_path
composer目录 vendor_path
运行缓存目录 runtime_path
路由目录 route_path
当前模块目录 module_path

4、命名空间

特别注意的是,如果你需要调用PHP内置的类库,或者第三方没有使用命名空间的类库,记得在实例化类库的时候加上 \,例如:

// 错误的用法
$class = new stdClass();
$xml  =  new SimpleXmlElement($xmlstr);
// 正确的用法
$class = new \stdClass();
$xml  =  new \SimpleXmlElement($xmlstr);

从ThinkPHP5.0开始,遵循PSR-4自动加载规范,只需要给类库正确定义所在的命名空间,并且命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载,从而实现真正的惰性加载。

例如,\think\cache\driver\File类的定义为:

namespace think\cache\driver;

class File 
{
}

如果我们实例化该类的话,应该是:

$class = new \think\cache\driver\File();

系统会自动加载该类对应路径的类文件,其所在的路径是 thinkphp/library/think/cache/driver/File.php

注:5.1版本默认的目录规范是小写,类文件命名是驼峰法,并且首字母大写。

5、容器和依赖注入

依赖注入其实本质上是指对类的依赖通过构造器完成自动注入,例如在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于访问控制器的参数都来自于URL请求,普通变量就是通过参数绑定自动获取,对象变量则是通过依赖注入生成。其实就是java的对象参数,这个概念豪头太大,又不好记。

<?php
namespace app\index\controller;

use app\index\model\User;

class Index
{
    protected $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function hello()
    {
        return 'Hello,' . $this->user->name . '!';
    }
}

系统内置绑定到容器中的类库包括:

系统类库 容器绑定标识
think\Build build
think\Cache cache

网站公告

今日签到

点亮在社区的每一天
去签到