【问题标题】:Fatal error: Class ... not found in ... /ProviderRepository.php on line 146致命错误:第 146 行的 ... /ProviderRepository.php 中找不到类 ...
【发布时间】:2016-02-19 08:09:00
【问题描述】:

这听起来像是一个微不足道的错误,但我已经好几个小时找不到解决方案了。

我尝试在我的 Laravel 项目中使用 https://github.com/michaelbonds/laravel-db2,并使用 composer 添加了它。

这是我的 composer.json。

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
        "michaelb/laravel-db2": "~2.0"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~4.0",
        "phpspec/phpspec": "~2.1"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "classmap": [
            "tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "pre-update-cmd": [
            "php artisan clear-compiled"
        ],
        "post-update-cmd": [
            "php artisan optimize"
        ],
        "post-root-package-install": [
            "php -r \"copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    }
}

这是错误:

PHP Fatal error:  Class 'MichaelB\Database\DB2\DB2ServiceProvider' not found in /var/www/html/mysjsu/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146

[Symfony\Component\Debug\Exception\FatalErrorException]     
  Class 'MichaelB\Database\DB2\DB2ServiceProvider' not found

我之前在 StackOverflow 上发现了一个类似的问题,有人建议顺序很重要。所以,这是我按以下顺序执行的操作:

  1. "michaelb/laravel-db2": "~2.0" 添加到composer.json
  2. 运行php ../composer.phar update
  3. MichaelB\Database\DB2\DB2ServiceProvider::class 添加到config/app.php 中的providers 数组中
  4. 运行php artisan migrate

知道可能是什么问题吗?

【问题讨论】:

  • @andrewtweber 我尝试了重做所有内容,然后使用composer install,然后使用composer update --no-scripts,但它没有解决它。似乎该链接中的人尚未安装该软件包,而我已经安装了。我实际上可以在vendor 目录下看到包的文件夹,它有DB2ServiceProvider 类,这正是编译器抱怨的文件。知道为什么吗?感谢您的帮助,如果听起来重复,对不起
  • 试试composer dumpautoloadphp artisan optimize
  • @andrewtwebre 我可以做composer dumpautoload,但是对于php artisan optimize,我必须从提供者数组中注释掉MichaelB\Database\DB2\DB2ServiceProvider::class。如果我没有注释掉那一行,我会得到同样的错误。我还在尝试了解这里有什么问题,我看不出文件是否有任何问题
  • @andrewtweber 似乎只有在我运行任何php artisan 命令而不从提供程序数组中删除MichaelB\Database\DB2\DB2ServiceProvider::class 时才会出现错误
  • 尝试注释掉 providers 数组中的行,然后运行这些命令,然后取消注释?

标签: php laravel laravel-5 composer-php laravel-5.1


【解决方案1】:

这个包是cooperl/laravel-db2 的一个分支。文档不准确。

他将命名空间更改为MichaelB,但从未将其标记为稳定版本,因此当您作曲家需要他的~2.0 时,packagist 会为您提供具有错误命名空间的旧版本。

因此,当您运行 composer update 时,它会运行一些 post-cmd 脚本,例如 php artisan optimize,它会尝试从配置文件中提取但由于该类不存在而失败。

解决方法如下:

  1. 将 composer.json 更改为此版本:

    "michaelb/laravel-db2": "dev-master"
    
  2. 运行composer update --no-scripts

那你应该很好。

【讨论】:

  • 其实依赖分支是一件坏事。打开一个问题并要求开发人员标记一个新版本。
  • @Sven 这是真的。不过,这家伙在他的 GitHub 项目上禁用了问题……那该怎么办?我会建议 teamf 使用不同的项目或原始源 (cooperl/laravel-db2) 而不是这个分支,除非有某些原因他需要分支
  • 完全正确:如果没有工作版本,也没有办法报告问题,您是否希望该软件在主分支上完美运行?注册了 77.000 个包,有 350.000 个不同的版本。应该有一个具有更好的开发人员支持的软件包来解决这个问题。远离维护不善的软件包。
猜你喜欢
  • 2012-11-08
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2015-01-18
  • 1970-01-01
  • 2019-05-09
相关资源
最近更新 更多