应用开发

多应用开发

目前采用的是多应用开发,已经拥有:adminapiapioutapikefuapi

对应用的目录结构如下

├─app 应用目录
│  ├─index              主应用
│  │  ├─controller      控制器目录
│  │  ├─view            视图目录
│  │  ├─config          配置目录
│  │  ├─route           路由目录

而我们的servicedaomodel都是公用的。不在刻意的区分应用去写业务。这样的话所有的业务尽量共被所有的应用所使用,提高代码复用性

应用配置

增加app/index/config/route.php,增加如下代码,因为在总配置中,并没有开启强制路由,所以到单独配置,如果不需要强制路由可以不用增加此配置文件

return [
    // 是否强制使用路由
    'url_route_must'        => true,
    // 合并路由规则
    'route_rule_merge'      => true,
    // 路由是否完全匹配
    'route_complete_match'  => true,
    // 是否自动转换URL中的控制器和操作名
    'url_convert'           => false,
];

应用路由配置

路由存放在app/index/route/目录。文件名称可以随意创建。默认使用route.php即可

<?php

use think\facade\Route;

Route::get('/',function(){

    echo '我是index应用';
});

定义路由后访问:

http://域名/index/

控制器新增

控制器存放在app/index/controller目录下,创建Home.php文件

<?php

namespace app\index\controller

class Home  extends BaseController
{

    public function index()
    {
        echo '我是home->index';
    }

}

路由配置

Route::get('/home','Home/index');

控制器下多层目录路由配置

例如控制器下的目录是app\index\controller\config\SystemConfig.php

多级目录需要用点来区分,斜杠后面的是控制器中的具体方法

Route::get('/config','config.SystemConfig/index');

异常处理

创建app\index\IndexExceptionHandle.php

<?php

namespace app\index;

use think\exception\Handle;
use think\Response;
use Throwable;

class IndexExceptionHandle extends Handle
{

    //不需要记录信息(日志)的异常类列表
    protected $ignoreReport = [

    ];

    //这里可以记录异常日志
    public function report(Throwable $exception): void
    {

    }

    //这里可以处理异常信息如何抛出,相应给用户
    public function render($request, Throwable $e): Response
    {
        //可以判断某个异常抛出的状态和展示给用户的内容
        if ($e instanceof DbException) {
            return app('json')->fail(100102, $massageData);
        }

        //如果某个异常需要使用系统自带的抛出可以使用下面的方式
        return parent::render($request,$e);
    }
}

services在controller的使用

可以在构造方法中注入需要使用的service.

如果继承了BaseController需要调用parent::__construct($app);

<?php

namespace app\index\controller

use think\facade\App;
use app\services\user\UserServices;

class Home  extends BaseController
{
    //注入service
    public function __construct(App $app, UserServices $services)
    {
        parent::__construct($app);
        $this->services = $services;
    }

    public function index()
    {
        //查询用户uid=1的用户信息
        $user = $this->services->get(1);
    }
}