首先,tp6官方手册,需要的可以自己查看序言 · ThinkPHP6.0完全开发手册 · 看云
一、下载命令tp6框架和多级控制器
//下载命令 tp6为文件名,可定义composer create-project topthink/think tp6//下载多级控制器composer require topthink/think-multi-app
二、配置文件
1、config文件
//app.php'auto_multi_app' => true,//开启多级控制器(添加代码)'error_message'=> true, // 错误显示信息,非调试模式有效(修改代码)//database.php,connections里面,填写数据库信息,可填写多个数据库信息,例如'connections' => ['user1' => [// 数据库类型'type'=> env('database.type', 'mysql'),// 服务器地址'hostname'=> env('database.hostname', '127.0.0.1'),// 数据库名'database'=> env('database.database', 'php66'),// 用户名'username'=> env('database.username', 'php66'),// 密码'password'=> env('database.password', 'php123456'),// 端口'hostport'=> env('database.hostport', '3306'),// 数据库连接参数'params'=> [],// 数据库编码默认采用utf8'charset' => env('database.charset', 'utf8'),// 数据库表前缀'prefix'=> env('database.prefix', ''),// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)'deploy'=> 0,// 数据库读写是否分离 主从式有效'rw_separate' => false,// 读写分离后 主服务器数量'master_num'=> 1,// 指定从服务器序号'slave_no'=> '',// 是否严格检查字段是否存在'fields_strict' => true,// 是否需要断线重连'break_reconnect' => false,// 监听SQL'trigger_sql' => env('app_debug', true),// 开启字段缓存'fields_cache'=> false,],'user2' => [// 数据库类型'type'=> env('database.type', 'mysql'),// 服务器地址'hostname'=> env('database.hostname', '127.0.0.1'),// 数据库名'database'=> env('database.database', 'url'),// 用户名'username'=> env('database.username', 'url'),// 密码'password'=> env('database.password', 'url123'),// 端口'hostport'=> env('database.hostport', '3306'),// 数据库连接参数'params'=> [],// 数据库编码默认采用utf8'charset' => env('database.charset', 'utf8'),// 数据库表前缀'prefix'=> env('database.prefix', ''),// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)'deploy'=> 0,// 数据库读写是否分离 主从式有效'rw_separate' => false,// 读写分离后 主服务器数量'master_num'=> 1,// 指定从服务器序号'slave_no'=> '',// 是否严格检查字段是否存在'fields_strict' => true,// 是否需要断线重连'break_reconnect' => false,// 监听SQL'trigger_sql' => env('app_debug', true),// 开启字段缓存'fields_cache'=> false,]],
2、修改.example.env文件,将.example.env重命名为.env
//其作用可看官网,也可以配置数据库,这个配置以后database.php就不起作用了.//想配置的如下,不想配置的删掉部分就好APP_DEBUG = true[APP]DEFAULT_TIMEZONE = Asia/Shanghai[DATABASE]TYPE = mysqlHOSTNAME = 127.0.0.1DATABASE = php66USERNAME = php66PASSWORD = php123456HOSTPORT = 3306CHARSET = utf8DEBUG = true[LANG]default_lang = zh-cn//不配置的APP_DEBUG = true[APP]DEFAULT_TIMEZONE = Asia/Shanghai[DATABASE]DEBUG = true[LANG]default_lang = zh-cn
三、建立控制器文件
//手动建立或者用命令建立都行php think build my//指令建立my文件,自动在app文件夹下生成文件,然后手动建立route文件和其下面的router.php文件//手动建立参考下图
控制器是在my/controller文件,如图
我一共是建了5个控制器,主要是从c.php和a1.php、a2.php区别不同
a1.php:分别连接不同数据库
<?phpnamespace app\my\controller\a;use app\BaseController;use think\facade\Db;class a1 extends BaseController{public function testc(){return '我是a1.php呀的testc';}public static function test(){// $sql="SELECT * FROM `user` where id=1";// $query = Db::connect('user1')->query($sql);$sql="SELECT * FROM `test` where id=777";$query = Db::connect('user2')->query($sql);return json($query);}}
a2.php:使用其他控制器的方法
<?phpnamespace app\my\controller\a;use app\my\controller\a\a1;use app\BaseController;class a2 extends BaseController{public function testc(){return '我是a2.php呀的testc';}public function test(){return a1::test();}}
c.php:接收前端的数据并返回数据
<?phpnamespace app\my\controller;use app\BaseController;class c extends BaseController{public function testc(){$param = $this->request->get();return json($param) ;}}
但是前端会报错,跨域问题,所以要在my/middleware.php设置跨域,代码如下
<?php// 这是系统自动生成的middleware定义文件return [\think\middleware\AllowCrossDomain::class,];
四、访问及配置路由
b1.php和b2.php与上面的功能类似,不做细说
控制器写好了,可以通过控制器访问,也可以通过路由访问,二者选其一
控制器访问:
c.php:域名/my/c/testc
a1.php的testc:域名/my/a.a1/testc
路由访问:
需要配置文件,route/router.php
<?phpuse think\facade\Route;Route::get('c', 'c/testc'); //通过 域名/my/c 访问Route::group('a',function(){Route::get('a1-1', 'a.a1/testc');//通过域名/my/a/a1-1访问Route::get('a1-2', 'a.a1/test'); //通过域名/my/a/a1-2访问Route::get('a2-1', 'a.a2/testc'); //通过域名/my/a/a2-1访问Route::get('a2-2', 'a.a2/test');//通过域名/my/a/a2-2访问});Route::get('b1', 'b.b1/test');//通过 域名/my/b1 访问
五、测试运行
//自己设定端口php think run -p 8086
我是用的phpstudy集成环境
根目录设置为public,测试的时候发现会404,所以要写个伪静态
if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s=/$1 last;break;}