【问题标题】:Fatal error while upgrading Laravel 5.1 to 5.2将 Laravel 5.1 升级到 5.2 时出现致命错误
【发布时间】:2016-03-27 11:52:46
【问题描述】:

我从 5.1 到 5.2 关注官方 upgrade guide。第一个小节说:

如果您要安装 Laravel 5.2 的 beta 版本,请添加 "minimum-stability": "beta" 到您的 composer.json 文件中。

更新您的 composer.json 文件以指向 laravel/framework 5.2.*

symfony/dom-crawler ~3.0symfony/css-selector ~3.0 添加到 composer.json 文件的 require-dev 部分。

现在,在我引入上述更改并运行 composer update 后,我收到以下错误:

PHP Fatal error:  Class 'Illuminate\Routing\ControllerServiceProvider' not found 
in /home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146

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

[RuntimeException]
Error Output: PHP Fatal error:  Class 'Illuminate\Routing\ControllerServiceProvider' not found in /home/vagrant/Code/myproject/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146

在更新完成后引发错误,并发生“生成自动加载文件”。

可能出了什么问题?

这看起来不像是自定义包问题,而是核心问题。我是否应该继续使用升级指南并运行composer update AFTER all 已调整以适应新的框架版本?

更新

之后运行composer dump-autoload不会抛出上述错误。不过,仍然令人困惑。

【问题讨论】:

  • 在相关说明中,未来的读者可能想查看Laravel Shift - Laravel 项目的自动升级工具。

标签: php laravel laravel-5.1 laravel-5.2


【解决方案1】:

没有Illuminate\Routing\ControllerServiceProvider了。

如果我是你,我会将我的应用项目与 https://github.com/laravel/laravel/commits/develop 进行比较,例如,如果你查看 https://github.com/laravel/laravel/blob/develop/config/app.php,你会看到 Laravel 5.2 的默认提供程序:

Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
 * Application Service Providers...
 */
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,

【讨论】:

  • 这是否意味着我可以安全地从 config/app.php 中删除该条目?
  • 看起来是的,但是你应该确保app文件夹的整个结构和文件内容与Laravel 5.2中的新文件夹匹配
  • 好的,谢谢。升级指南实际上告诉我在“服务提供商”部分将其删除。猜猜最好在调整完所有代码和结构后更新作曲家依赖项。
  • @lesssugar 是的,升级说明的顺序很奇怪
  • 那么,如果您删除了它们但它仍在寻找它们怎么办?我认为它们可能会像在我的 bootstrap/cache/services.json 中一样被缓存
【解决方案2】:

在现有项目从 5.1 更新到 5.2 时,我们发现在删除提供程序的行之前和之后运行 composer update

Illuminate\Routing\ControllerServiceProvider::class Illuminate\Foundation\Providers\ArtisanServiceProvider::class

是完成 laravel 更新的必要步骤。

运行之前将允许 laravel 下载和更新当前框架库依赖项,然后在删除后运行(composer 能够完成而没有问题)

我们还发现 .env 文件中的任何值都不能有空格,并且必须用引号括起来才能起作用。

【讨论】:

    【解决方案3】:

    更新 config/ 下的 app.php 文件解决了一个问题,但随着 bootstrap/cache 文件夹的引入,您可能会继续遇到同样的错误。

    我在删除缓存文件之前运行了作曲家更新,所以我一直遇到同样的错误。确保首先删除 bootstrap/cache/services.php 文件。

    可能有一个工匠命令,但我完全错过了文档中的这一步。

    【讨论】:

    • 帮助,使用 rm bootstrap/cache/*.php 修复我的错误
    • 这个答案让我解决了我的问题。只是删除 services.php,我仍然得到错误。我还需要删除 bootstrap/cache/compile.php。在我的本地主机上一切正常,但在实时服务器上却不行,删除这两个缓存文件解决了我的问题。谢谢@adam!
    【解决方案4】:

    从 config/app.php 中移除两个服务提供者

    Illuminate\Foundation\Providers\ArtisanServiceProvider::class,
     Illuminate\Routing\ControllerServiceProvider::class,
    

    【讨论】:

      【解决方案5】:

      我在这里找到了解决方案:

      https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

      服务提供商

      Illuminate\Foundation\Providers\ArtisanServiceProvider 应该从您的 app.php 配置文件中的服务提供商列表中删除。

      Illuminate\Routing\ControllerServiceProvider 应该从 app.php 配置文件中的服务提供商列表中删除。

      【讨论】:

        【解决方案6】:

        从引导缓存文件夹中删除 packages.php 和 config.php 运行 composer dump-autoload 后

        【讨论】:

          猜你喜欢
          • 2016-03-31
          • 2019-02-14
          • 2015-08-30
          • 1970-01-01
          • 2016-05-11
          • 2021-04-25
          • 2015-08-26
          • 2020-08-26
          • 2017-02-04
          相关资源
          最近更新 更多