多应用开发
目前采用的是多应用开发,已经拥有:adminapi
、api
、outapi
、kefuapi
。
对应用的目录结构如下
├─app 应用目录
│ ├─index 主应用
│ │ ├─controller 控制器目录
│ │ ├─view 视图目录
│ │ ├─config 配置目录
│ │ ├─route 路由目录
而我们的service
、dao
、model
都是公用的。不在刻意的区分应用去写业务。这样的话所有的业务尽量共被所有的应用所使用,提高代码复用性
应用配置
增加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);
}
}
Was this helpful?
0 / 0