## 关于安装 `6.0`版本基于PHP`7.1`版本开发,所以你的PHP运行环境必须是PHP`7.1+`(注意有时候你的命令行和WEB的PHP版本是不同的),最新版本已经兼容PHP`8.0`。 >[danger] 新版必须使用`composer`安装,因为`6.0`完全依赖`composer`使用,如果你**通过git下载安装将不能正常使用**。如果你使用`composer`安装ThinkPHP过程特别慢,请使用阿里云镜像或者科学上网。 对于新手而言,推荐的安装方式是 ``` composer create-project topthink/think tp ``` 系统会自动为你生成一个项目所需要的目录架构和需要的文件。 记住,无论如何,不要在项目里面修改核心框架目录下的任何文件,除了`vendor`目录之外的其它目录都属于你的项目代码,可以随意修改。 安装完成之后,进入`cmd`控制台,使用内置指令启动服务。 ``` cd tp php think run ``` 现在你可以开始你的TP6开发之旅了。 在浏览器里面输入 ``` http://localhost:8000 ``` 就会看到熟悉的欢迎页面(并显示当前安装的版本号) ![](https://img.kancloud.cn/0a/01/0a013856b8b47af65e054dd2e2e18c3b_853x430.png =480x) 如果需要更改默认端口,可以使用 ``` php think run -p 80 ``` 请确保端口没有被占用。 >[info] 该指令仅供学习和测试过程使用(免去安装WEB服务器的麻烦),不建议用于正式上线部署。 ## 目录结构 默认安装后的目录结构如下: ~~~cmd www WEB部署目录(或者子目录) ├─app 应用目录 │ ├─controller 控制器目录 │ ├─common.php 公共函数文件 │ ├─event.php 事件定义文件 │ ├─ExceptionHandle.php应用异常处理类 │ ├─middleware.php 全局中间件定义文件 │ ├─provider.php 容器绑定定义文件 │ └─Request.php 应用请求对象类 │ ├─config 配置目录 │ ├─app.php 应用配置 │ ├─cache.php 缓存配置 │ ├─console.php 控制台配置 │ ├─cookie.php Cookie配置 │ ├─database.php 数据库配置 │ ├─filesystem.php 文件磁盘配置 │ ├─lang.php 多语言配置 │ ├─log.php 日志配置 │ ├─middleware.php 中间件配置 │ ├─route.php URL和路由配置 │ ├─session.php Session配置 │ ├─trace.php Trace配置 │ └─view.php 视图配置 │ ├─view 视图目录 ├─route 路由定义目录 │ ├─route.php 路由定义文件 │ └─ ... │ ├─public WEB目录(对外访问目录) │ ├─index.php 入口文件 │ ├─router.php 快速测试文件 │ └─.htaccess 用于apache的重写 │ ├─extend 扩展类库目录 ├─runtime 应用的运行时目录(可写,可定制) ├─vendor 第三方类库目录(Composer依赖库) ├─.example.env 环境变量示例定义文件(参考) ├─composer.json composer 定义文件 ├─LICENSE.txt 授权说明文件 ├─README.md README 文件 ├─think 命令行入口文件 ~~~ 系统生成的目录结构是经过精心设计的,没有必要做任何的调整,包括入口文件位置。所以确保你的WEB目录指向`public`目录而不是应用根目录。 `app`目录名对应的同时也是应用的根命名空间(而且不能更改),并且按照`PSR-4`规范进行应用类库的自动加载。 对于系统的缓存目录、日志目录和`Session`目录都是可以自定义的,但没有必要自定义`runtime`目录。 所以,在你对应用的目录结构进行更改之前,请确认你是否需要这么做,以及你明确知道相应的后果。 ## 调试模式 默认安装后使用的是部署模式,开发过程中应当开启调试模式,便于调试问题。 把应用根目录下的`.example.env` 文件重命名为`.env`文件,这是用于本地开发的环境变量定义文件。 该文件默认已经开启了调试模式(确认是否包含下面一行环境变量定义)。 ``` APP_DEBUG = TRUE; ``` ThinkPHP`6.0`版本是不支持通过配置参数开启调试模式,在提交版本库的时候会自动忽略`.env`文件,这样服务器部署后的代码就是部署模式。 新版默认安装会安装`symfony/var-dumper`库,因此你会看到不同以往样式的`dump`输出,并且可以使用其自带的`dd`输出并终止执行函数。 如果不喜欢这个调试输出的风格,可以直接卸载这个扩展而不会有任何的影响,并且依然可以使用`dump`函数。 ``` composer remove symfony/var-dumper ``` ## 配置文件 新版不再使用惯例配置文件,项目的默认配置(称之为全局配置,对所有应用适用)在安装完成后已经自动生成在项目根目录的`config`目录下,并且都提供了清晰的注释。 如果是多应用模式的话,每个应用可以有独立的配置文件,通常是在应用目录下的`config`目录。应用配置文件会覆盖全局配置文件中的同名参数。 配置文件默认使用PHP数组格式(后缀为`php`),你可以在环境变量中定义配置文件的后缀来改变配置文件定义格式,例如: ``` CONFIG_EXT = ini; // 支持ini/yaml/json格式 ``` 和之前版本的一个比较大的区别在于配置参数不再支持动态设置,所以下面的用法是不支持的 ``` Config::set('app.app_host', 'thinkphp.cn'); ``` 实际上,大多数时候你甚至不需要去操作配置类(除非在开发一些扩展或中间件的时候需要读取配置参数),框架会在适当的时候自动加载这些配置,你不需要关心什么时候载入配置,或者什么时候读取了某个参数。因为你实际操作某个类库的时候,配置已经读取完成并自动工作。 >[info] 关于核心框架具体有哪些配置参数,建议你仔细参考根目录`config`下的一系列配置文件,其中都有详细的注释说明。 如果你在开发环境和部署环境需要区分不同的配置,应当使用环境变量并保持一套统一的配置文件,`config`目录下自动生成的配置文件就大量使用了环境变量,例如数据库配置文件通常会使用如下配置定义: ``` // 数据库类型 'type' => Env::get('database.type', 'mysql'), // 服务器地址 'hostname' => Env::get('database.hostname', '127.0.0.1'), // 数据库名 'database' => Env::get('database.database', ''), // 用户名 'username' => Env::get('database.username', 'root'), // 密码 'password' => Env::get('database.password', ''), // 端口 'hostport' => Env::get('database.hostport', '3306'), ``` 对于本地开发环境,你可以使用前面提到的`.env`文件设置环境变量。 >[danger] 值得引起重视的是,`6.0`版本的`Request`类是没有任何配置参数的,具体原因后面会提及。 `V6.0.8+`版本开始,可以支持多环境配置文件,例如你可以定义多个环境变量定义文件 ``` .env.develop .env.preview .env.testing ``` 然后可以在入口文件中设置当前使用的环境变量文件名