【问题标题】:Composer downloads the package and put in the vendor map but the service provider doesn't recognize it laravel 6Composer 下载包并放入供应商地图,但服务提供商无法识别它 laravel 6
【发布时间】:2020-04-14 18:04:13
【问题描述】:

我从 git 派生了一个 api 处理程序,我需要更新它以兼容 laravel 6 (api handler that i forked what is not laravel 6 compatible),但我不断收到 composer 错误

所以当我运行composer update 时,它会从 git 安装包并将其正确放在供应商文件夹中。什么工作正常,然后我像这样将类添加到config/app.php

'providers'       => [
    Name\ApiHandler\ApiHandlerServiceProvider::class,
],

什么会在 laravel 中抛出这个错误

In ProviderRepository.php line 208:
Class 'Name\ApiHandler\ApiHandlerServiceProvider' not found

到目前为止我已经尝试过:

  1. composer clear-cache
  2. rm -rf .cache/composer/*
  3. 清除引导作曲家
  4. 删除composer.lock
  5. 删除vendor

然后是composer update,但它一直抛出错误。但是当我在我的编辑器中并转到 config/app.php 并在按住 ctrl 的同时单击 Name\ApiHandler\ApiHandlerServiceProvider::class, 它会找到该类并转到供应商地图,因此我的想法表明该类已正确导入

这是 laravel 项目中 composer.json 的样子

"repositories": [
{
  "type":"package",
  "package": {
    "name": "name/laravel-api-handler",
    "version":"dev-laravel-6",
    "source": {
      "url": "https://github.com/name/laravel-api-handler",
      "type": "git",
      "reference":"branch name"
    }
  }
}
],
"require": {
  "name/laravel-api-handler": "dev-laravel-6",
},

api 处理程序 composer.json

 "autoload": {
    "psr-4": {
        "name\\ApiHandler\\": "src"
    }
},
"extra": {
    "laravel": {
        "providers": [
            "name\\ApiHandler\\ApiHandlerServiceProvider"
        ]
    }
},

地图结构为vendor/name/laravel-api-handler/src

当运行Composer updateComposer install 时,自定义包也不会显示在Discovered Package

我错过了什么是因为我不知道出了什么问题

【问题讨论】:

  • 我可以看到,这个包已经过时了,最近没有更新。更好的办法是避免使用这个包。
  • 是的,我知道为什么我在这种情况下分叉并更新了它,但我无法让作曲家工作
  • 您是否将包中所有文件的名称空间更改为新的名称空间?所以 Name\ApiHandler\ApiHandlerServiceProvider 实际上是在 Name\ApiHandler 命名空间中,而不是在旧的命名空间中。可能是它根本没有自动加载。我很确定您可以通过composer dumpauto -vvv 获取有关正在加载的内容的更多详细信息。
  • 它读取 composer.json 文件但没有加载到包中我还重新检查了所有命名空间都被正确替换供应商中的所有文件都有命名空间Name\ApiHandler 只有Name\ApiHandler\ApiHandlerServiceProviderconfig/app,php 是这样设置的吗?我的想法表明它正确地进入了那个供应商地图

标签: php laravel composer-php laravel-6


【解决方案1】:

因此,在对将自定义包编辑到您的项目进行研究之后,显然 composer 不会自动加载 "type":"package" 任何地方的文档中没有提到的内容。 link where it get explained

【讨论】:

    【解决方案2】:

    尝试删除/重命名您的供应商文件夹。然后做composer install。那么请再次检查。如果这不起作用,请执行composer update。不确定引擎盖下发生了什么,但 composer update 在我的情况下成功了。

    【讨论】:

      【解决方案3】:

      将 ApiHandler 外观导入您的类:-

      使用 ApiHandler\Facades\ApiHandlerServiceProvider;

      置顶

      【讨论】:

      • 它被导入到它可以识别类并找到它的类中,只是 laravel 提供者找不到服务提供者,因为我假设作曲家没有将它们加载到自动加载中,我猜那是laravel 在服务提供者中找不到类的原因
      【解决方案4】:

      要解决它,

      • 删除bootstrap/cache/config.php 文件。然后再次运行。
      • 以下命令一一运行

        composer dump-autoload
        
        php update
        

      【讨论】:

      • 在执行rm -rf bootstrap/cache/* 然后运行composer dump-autoload 它返回错误In ProviderRepository.php line 208: Class 'Name\ApiHandler\ApiHandlerServiceProvider' not found
      猜你喜欢
      • 2016-04-11
      • 2016-08-23
      • 2020-01-11
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 2017-07-26
      • 2015-11-20
      • 2011-07-27
      相关资源
      最近更新 更多