Thinkphp6-多级控制器、路由、数据库等大杂烩

        首先,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 = mysql
HOSTNAME = 127.0.0.1
DATABASE = php66
USERNAME = php66
PASSWORD = php123456
HOSTPORT = 3306
CHARSET = utf8
DEBUG = 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:分别连接不同数据库

<?php
namespace appmycontrollera;
use appBaseController;
use thinkfacadeDb;


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:使用其他控制器的方法

<?php
namespace appmycontrollera;
use appmycontrolleraa1;
use appBaseController;
class a2 extends BaseController{
    public function testc(){
        return '我是a2.php呀的testc';
    }
    public function test(){
        return a1::test();
    }
}

c.php:接收前端的数据并返回数据

<?php
namespace appmycontroller;
use appBaseController;
class c extends BaseController{
    public function testc(){
        $param = $this->request->get();
        return json($param) ;
    }
}

但是前端会报错,跨域问题,所以要在my/middleware.php设置跨域,代码如下

<?php
// 这是系统自动生成的middleware定义文件
return [
    thinkmiddlewareAllowCrossDomain::class,
];

四、访问及配置路由

b1.php和b2.php与上面的功能类似,不做细说

控制器写好了,可以通过控制器访问,也可以通过路由访问,二者选其一

控制器访问:

c.php:域名/my/c/testc

a1.php的testc:域名/my/a.a1/testc

路由访问:

需要配置文件,route/router.php

<?php
use thinkfacadeRoute;

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;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>