企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
在config/app.php配置文件中有两个默认的配置 ``` // 错误显示信息,非调试模式有效 'error_message' => '页面错误!请稍后再试~', // 显示错误信息 'show_error_msg' => false, ``` 在不开启调试的情况下,页面错误会提示【页面错误!请稍后再试~】 当`'show_error_msg' => true,`时,提示错误的代码 ![](https://img.kancloud.cn/df/e3/dfe3145a45d30b0051c8650b1b2004fc_608x47.png) ![](https://img.kancloud.cn/e0/1d/e01d7732d824787eab3c2e1f5bc3c10a_688x43.png) # **空控制器** >[info]空控制器的概念是指当系统找不到指定的控制器名称的时候(如模块和控制器不存在),系统会尝试定位当前应用下的空控制器(默认:`Error`)类 此类名可在config\route.php中修改: ``` 'empty_controller' => 'Error', ``` >[danger] 空操作貌似已被取消,我们需要在BaseController添加`__call($method,$arg)`方法自定义错误处理逻辑 > 在route配置中如果开启了'controller\_suffix' 使用控制器后缀 则Error.php文件 应该改名为ErrorController.php文件 ## **单应用模式下空控制器的定义** app/controller/Error.php ~~~ namespace app\controller; class Error { public function __call($method, $args) { return 'error request!'; //return json(['status'=>0,'message'=>'找不到该方法'.$method,'result'=>null],400,$header=[]); } } ~~~ ## **多应用模式下空控制器定义** app/admin/controller/Error.php ``` <?php namespace app\admin\controller; class Error { public function __call($method, $args) { return 'error request!'; } } ``` >[info]逻辑在\vendor\topthink\framework\src\think\route\dispatch\Controller.php文件的controller方法里实现的 ``` /** * 实例化访问控制器 * @access public * @param string $name 资源地址 * @return object * @throws ClassNotFoundException */ public function controller(string $name) { //获取route.php配置文件是否使用控制器后缀 来设置控制器后缀 $suffix = $this->rule->config('controller_suffix') ? 'Controller' : ''; //访问控制器层名称(默认controller目录) $controllerLayer = $this->rule->config('controller_layer') ?: 'controller'; //空控制器名 $emptyController = $this->rule->config('empty_controller') ?: 'Error'; //解析应用类的类名 $class = $this->app->parseClass($controllerLayer, $name . $suffix); if (class_exists($class)) { return $this->app->make($class, [], true); } elseif ($emptyController && class_exists($emptyClass = $this->app->parseClass($controllerLayer, $emptyController . $suffix))) { return $this->app->make($emptyClass, [], true); } throw new ClassNotFoundException('class not exists:' . $class, $class); } } ```