ThinkPHP 6.0 部分配置
ThinkPHP 6.0 控制器

如果是 Nginx 服务器,并且版本不是太高,你需要看一下官方文档中的 Nginx 的路由转向配置,避免一下不必要的坑

官网参考链接:TP6 URL访问
找到 「Nginx」部分 图↓

location / { // …..省略部分代码
   if (!-e $request_filename) {
   		rewrite  ^(.*)$  /index.php?s=/$1  last;
    }
}

如果你用的是跟我一样的 MxSrvs 软件,配置如下↓

然后重启 Nginx 服务器即可。

变化

1.根目录文件名变化

ThinkPHP 5 版本(图左)是 application 文件夹,ThinkPHP 6 版本(图右)直接命名就是 app 文件夹。

2.默认用模式

ThinkPHP 6 默认是单应用模式,TP5 版本默认是多应用模式。
TP6 的多应用模式需要手动开启支持。
开启方法修改 config/app.php 配置文件中配置为 'auto_multi_app' => true 即可。
单例模式中,在控制器空间命名中,可以省略掉应用名 index (举例)。
命名空间
TP5 写法 namespace app\index\controller;
TP6 写法 namespace app\controller; (单应用模式)
文件位置
TP5 文件位置 application/index/controller/Index.php
TP6 文件位置 app/controller/Index.php
多应用开启后,就需要跟TP5一样的写法

注意:如果开启多应用模式,需要删除掉框架默认自带的 controller 文件夹,不然会依然每次访问,都默认到 controller 。

3.控制器命名规范变化

TP 5 中需要控制器文件名必须采用驼峰命名(首字母大写: Index)。
TP6 中兼容了普通写法,文件名完全小写: index ,只需要你的类名跟文件名保持一致即可
假设 文件名为 index.php ,那么类的写法为 class index{ } 。

4.支持控制器大驼峰命名 (两者都默认支持)

举例:
控制器文件名为 HelloWorld.php ,类名保持一致为 class HelloWorld { }
文件路径 app\index\controller\HelloWorld.php
访问地址 http://localhost/index.php/hello_world
现支持 http://localhost/index.php/HelloWorld 访问
此功能默认开启,如果想关闭,需要修改 route.php 配置文件中配置为 url_convert' => false 即可。

5.控制器文件名默认省略 controller 后缀

TP3.x 版本,就是不省略 controller 后缀,开启可以用作兼容低版本文件来用。
默认控制器文件名格式 Index.php,开启后,需要把控制器文件名格式变更为 IndexController.php
开启方法,修改 route.php 配置文件中配置为 'controller_suffix' => true

6.错误信息

TP6 中默认没有开启错误信息
只需要修改 config/app.php 配置文件中配置为 'show_error_msg' => true 即可显示错误信息,默认关闭。

7.开启开发调试模式
参考资料:TP6 官方调试模式

注意:是文件名 .example..env 把 .env 之前的全部删掉,仅仅保留 .env 。
然后报错图如下↓

配置小结

本小结仅限本文出现,当然还有其他好的配置。
1.开启多应用模式

修改 config/app.php 配置文件中配置为 'auto_multi_app' => true

2.关闭控制器大驼峰命名访问支持

修改 route.php 配置文件中配置为 url_convert' => false

3.开启错误信息

修改 config/app.php 配置文件中配置为 'show_error_msg' => true

4.开启控制器严格模式,即文件名不省略 Controller

修改 route.php 配置文件中配置为 'controller_suffix' => true

5.开启开发调试模式

只需要把根目录下 .example..env 文件更名为 .env 即可。

配置操作

官方文档:ThinkPHP 6 官方配置
1.配置获取
操作配置,需要引入 Config 类文件

use think\facade\Config;

2.读取配置 Config::get()

读取一级配置所有参数

Config::get('app');
Config::get('route');

读取单个配置

Config::get('app.app_name');
Config::get('route.url_domain_root');

读取数组配置

Config::get('database.default.host');

3.判断是否存在某个配置 Config::has()

Config::has('template');
Config::has('route.route_rule_merge');

4.修改配置 Config::set()
不在支持单个配置更新,需要数组批量更新配置

<?php
namespace app\index\controller;
use think\facade\Config;
class Index
{
    public function index()
    {
        //原为true 
        Config::set(["show_error_msg" => false],'app');
        $a = Config::get("app");
        var_dump($a);
    }
}

控制器

1.经典型控制器(多应用模式)

<?php
namespace app\index\controller;

class Index
{
    public function index()
    {
        return 'index';
    }
}

文件位置:app\index\controller\Index.php
访问URL:http://localhost/index.php/index

2.多级控制器(理论支持无限级)
注意多级控制的命名空间写法

<?php
namespace app\index\controller\user;

class  Blog 
{
    public function index()
    {
        return 'index';
    }
    
}

文件位置:app/index/controller/user/Blog.php
访问URL:http://localhost/index.php/user.blog/index
注意事项如下↓

3.引用其他模块类 需要 use 命名空间

<?php
namespace app\index\controller;
use think\facade\Config;
use app\index\controller\user\Blog;

class Index
{
    public function index()
    {
        $bolg = new Blog();
        return $bolg ->index();
        // return request()->controller();
    }
}

4.控制类继承 extends
use 一下需要继承的类文件
然后直接继承便可以调用类方法

<?php
namespace app\index\controller;
use think\facade\Config;

class Index extends Config
{
    public function index()
    {
        var_dump(Config::get('app'));
        // return request()->controller();
    }
}

5.空控制器
空控制器的使用场景是,当访问到一个不存在的方法时自动调用,可以作为当前控制下的404错误URL优化使用。

<?php
namespace app\index\controller;

class Index
{
    public function __call($method, $args)
    {
        return '调用当前空控制器方法!';
    }

    public function index()
    {
        return 'index';
    }
}

当我访问不存在的 hello 方法时↓

渲染输出

控制器一般不需要任何输出,直接 return 即可
不要在控制器中使用 die、exit 等类似的中断代码,需要调试,可以使用内置 halt 助手函数。
部分系统有效输出↓

<?php
namespace app\index\controller;

class Index 
{
    public function hello()
    {
    	// 输出hello,world!
        return 'hello,world!';
    }
    
    public function json()
    {
    	// 输出JSON
        return json($data);
    }
    
    public function read()
    {
    	// 渲染默认模板输出
        return view();
    }

}

路由

多级控制器官方推荐访问方法为 自定义配置路由
下节再聊🤣🤣🤣