Laravel 升级版本

原来用的是5.1版本的 Laravel ,用的过程中针对项目的需求在 vendor 目录做了些改动,然后现在想升级到5.3版本。

因为之前升级5.3做了几次都失败,然后开始尝试先从5.1升级到5.2,然后再从5.2升级到5.3.

but,,,,,升级5.2报错依旧报错如下:

(升级5.2参考的文档)

Writing lock file 
Generating autoload files
> Illuminate\Foundation\ComposerScripts::postUpdate
> php artisan optimize

  [Symfony\Component\Debug\Exception\FatalThrowableError]
  Class 'Illuminate\Routing\ControllerServiceProvider' not found

Script php artisan optimize handling the post-update-cmd event returned with error code 1

我是走进了啥误区。。。。求助

PS:vendor目录只改动了

vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php

一个文件,增加了几个自定义的 Exception 类型

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 12
TimJuly

vendor 目录都敢手工改,高手啊,还升啥级啊.

7年前 评论

@TimJuly 这话说得。。。用得着的时候适当改动一下而已,而且看起来升级失败的报错内容并不是由于我的改动导致的

7年前 评论

用官方源升级多好

7年前 评论

@Macken 官方源升级?是指?跟composer update有什么区别?

7年前 评论

不要改 vendor 下的东西,你的需求其实都可以在外面自己的代码里搞定,如果你发现你需要改 vendor 的时候,有两种情况:

  1. 你没有掌握该需求所涉及的知识点,也就是说你可能用错了。
  2. 你的需求有可能需要变更了。
7年前 评论
zion_xayts_com 1年前
leo

把config/app.php里面的providers字段里的Illuminate\Routing\ControllerServiceProvider::class删掉就行了

7年前 评论

@overtrue @lx1036

应该是没吃透框架的东西,才出此下策动了vendor,回头找个时间理一下,还是改回来吧。。。

@leo 3Q~ 回头忙完这段再试试

7年前 评论

@Silov237
异常不是有专门的地方来定义嘛,请问写到 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php 有什么便捷的操作吗?

file

file

7年前 评论

@zhuzhichao
这个我之前没有仔细研究handler的异常抛出方式,我需要的是:admin和www的两个不同的http_status异常,返回不同页面,以及api抛出异常的时候咦json形式返回给调用端

另外,laravel默认的错误日志是记录在storage/logs里面的,而判断是否记录日志的exception是在vendor里面的,如果我想将记录在storage/logs里面的错误同时,发送给我的邮箱,这个要添加的话,也要改动vendor目录的样子。。。

前者我承认我对框架研究不够深入,改动的有点莽撞,后者的话,目前没找到更合适的方式。。。

7年前 评论

@Silov237 App\Exceptions\Handler.php 里面有个变量,$dontReport,把不需要记录的放里面就可以不记录logs了。而 render 方法可以判断某个异常,决定是否发邮件,通过$request->ajax() || $request->wantsJson() 判断是否是 api 请求并返回对应的 json 或者是页面跳转。当然你前面说的不同的 http_status 可以通过 $request 对象来判断,并决定返回不同的内容。

例如:

// 如果是 dev 环境则发送 bearychat 到我们的讨论组
        if (app()->environment('dev') && $this->shouldReport($e)) {
            dispatch(new SendBearyChat(bearychat('default')->text("DEV出异常了!")->notification('异常: '.get_class($e))->add([
                'URL'           => app('request')->fullUrl(),
                'ExceptionType' => get_class($e)
            ])->add($e, get_class($e))));
        }
// 根据具体的请求返回不同的内容
        if ($e instanceof ForbiddenException || $e instanceof AuthorizationException) {
            $msg      = $e->getMessage() ?: '您没有权限访问';
            $code     = $e->getCode() ?: 403;
            $redirect = method_exists($e, 'getRedirect') && $e->getRedirect() ? $e->getRedirect() : route('error.403');

            return $request->ajax() || $request->wantsJson() ? response()->json([ 'message' => $msg ],
                $code) : response(view('errors.403', compact('code', 'msg', 'redirect')), $code);
        }

希望能帮到你 :swimmer:

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!