Laravel
项目
composer create-project laravel/laravel=7.* laravel-demo
cd laravel-demo && php artisan serve
Laravel development server started: http://127.0.0.1:8000
[Wed May 26 16:10:31 2021] PHP 7.4.3 Development Server (http://127.0.0.1:8000) started
routes/web.php
的代码修改为Route::get('/', function () {
return [
'code' => 200,
'msg' => 'hello'
];
});
config/app.php
中的视图提供者Illuminate\View\ViewServiceProvider::class
, 再次访问首页Laravel
Target class [view.engine.resolver] does not exist.
这个错误其实是facade/ignition
这个服务提供者导致的,facade/ignition
是一个漂亮的错误页面, 它依赖视图服务, 并且是自动注册的,所以我们要做的就是不要注册它.composer.json
"extra": {
"laravel": {
"dont-discover": [
"facade/ignition"
]
}
},
composer dump-auto
Laravel
默认的错误页面,并且错误消息不足,我们查看一下错误日志文件storage/logs/laravel.log
Session
的启动导致的错误,不过在想这两个并没有什么关系,后面排查了一会,终于找到问题所在web
中间组里的ShareErrorsFromSession
, 从Session
中获取错误, 然后共享到视图里, 这里就会依赖视图服务, 我们注释掉这个中间件Laravel
版本低的话,Illuminate\Pagination\PaginationServiceProvider::class
和Illuminate\Notifications\NotificationServiceProvider::class
这两个服务提供者也是依赖视图服务的,不过新版本的已经修改为延迟加载可不注释http://localhost:8000/no
, 这个路由我们并没有写Laravel
会去找storage/views/errors/404.blade.php
的视图文件(根据状态码找对应的文件)app\Exceptions\Handler.php
自定义处理错误 public function render($request, Throwable $exception)
{
$code = 500;
if ($exception instanceof NotFoundHttpException) {
$code = 404;
}
return (
new Response(json_encode([
'code' => $code,
'msg' => $exception->getMessage()]
))
)
->withHeaders(['Content-Type' => 'application/json']);
// 注释默认的错误处理
// return parent::render($request, $exception);
}
API
和admin
混合,admin
需要使用视图,API
不需要. 这种时候我的建议是在config/app.php
增加一个配置enable_admin
, 然后判断当前环境是API
移除掉不必要服务提供者,也不要启动后台的服务,具体可查看减少服务提供者的启动加速你服务的性能 2.0