Thinkphp6(一)多级控制器、路由、数据库等大杂烩
2022-11-24 11:10:29
151
{{single.collect_count}}

        首先,tp6官方手册,需要的可以自己查看序言 · ThinkPHP6.0完全开发手册 · 看云

或者序言 · 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;}

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}