【问题标题】:PHP - not instantiable while building [Spatie\Cors\Cors]PHP - 在构建 [Spatie\Cors\Cors] 时不可实例化
【发布时间】:2019-03-30 23:06:14
【问题描述】:

我不熟悉 CORS。有人将它添加到这个项目中,我对此知之甚少。我一直在尝试将此项目的开发版本部署到实时服务器,但出现此错误。

Target [Spatie\Cors\CorsProfile\CorsProfile] is not instantiable while building [Spatie\Cors\Cors].

我没有在网上找到很多关于这个错误的信息。然而,我确实遇到了一个线程,说我需要将提供程序添加到我的config/app.php 但是这给我带来了使用php artisan 命令时的新错误。

Class 'Spatie\Permission\PermissionServiceProvider not found

现在我知道它在之前的部署中运行良好,所以我不确定现在是什么触发了这种情况。坦率地说,我不想漫无目的地为这些家伙的工作添加太多内容,因为我真的不知道他在用它做什么,我一直在尝试了解它的用途,以便我可以修复它或重新实现它,但是所以到目前为止,我没有运气。有谁知道如何解决这个问题或我应该从哪里开始?

php工匠包:发现

Discovered Package: fideloper/proxy
Discovered Package: nesbot/carbon
Discovered Package: laravel/tinker
Discovered Package: laravel/cashier
Discovered Package: spatie/laravel-cors
Discovered Package: tymon/jwt-auth
Package manifest generated successfully.

【问题讨论】:

  • 尝试composer dump-autoload,如果不起作用,请尝试composer update
  • 我应该将提供者保留在config/app.php 中吗?它以前不存在,但工作得很好。
  • 在config/app.php中添加serviceprovider:Spatie\Permission\PermissionServiceProvider::class,之后,运行这个命令:composer update
  • 好的,所以我将它添加到 config/app.phpproviders ,运行 composer dumpautoload 并且仍然遇到相同的错误。 (Target [Spatie\Cors\CorsProfile\CorsProfile] is not instantiable while building [Spatie\Cors\Cors].) 刷新我的网站时。我还清除了我的浏览器缓存,以便排除这个问题。
  • PermissionServiceProvider 用于单独的包。你跑composer install了吗?

标签: php laravel cors


【解决方案1】:

对于初学者,Target [...] is not instantiable while building [...] 表示绑定到服务容器的问题。 通常这是由于包的ServiceProvider没有注册造成的。

大多数为 Laravel 5.5 及更高版本开发的包会在 composer 运行 @php artisan package:discover 命令时自动注册它们的服务提供者(它在 composer.json 的 post-autoload-dump 脚本中定义)。在较旧的 Laravel 版本中,您需要手动将包的服务提供者添加到 config/app.php

在这种情况下,看起来Spatie\Cors\Cors 中间件正在尝试解析Spatie\Cors\CorsProfile\CorsProfile 的实例(这是一个接口from the container,而容器不知道如何做一个。这个包的服务提供者binds这个接口是在config/cors.phpcors_profile设置中找到的配置值,所以我会先检查那个值并与他们包的自述文件中显示的默认值进行比较:https://github.com/spatie/laravel-cors .也可能存在命名空间问题,例如您的一个文件中的 use 语句中的错误。

在您的情况下,将 Spatie\Permission\PermissionServiceProvider::class 添加到 config/app.php 提供程序数组不起作用,因为它是一个不同的包Spatie\Permission\Contracts\Permission 也是如此 - 这些都是 spatie/laravel-permission 的一部分,而不是 spatie/laravel-cors。如果这是问题所在,这个包的正确服务提供者应该是Spatie\Cors\CorsServiceProvider::class,如果你使用的是旧版本的包,并且没有更新为使用 Laravel 5.5 的自动发现功能,则可能会出现这种情况。但是,我认为可以排除它,因为它已在 package:discover 输出中列出。

【讨论】:

  • 非常感谢您的帮助。我的文件 'allow_headers' 有一个小差异 'X-Requested-With', 而 github 上的文件没有。
  • 一个问题。我的本地主机也会出现这个问题吗?我的本地版本似乎很好。我想知道这是否是在部署时发生的。
  • @jermaynewilliams 你有没有想过这个问题?我刚刚在 localhost 上遇到了确切的问题,这是由于数据库权限问题(我忘记了我仍然通过 VPN 连接)。
猜你喜欢
  • 2017-07-24
  • 2018-11-28
  • 2016-07-05
  • 2019-07-05
  • 2021-12-14
  • 1970-01-01
  • 2019-05-22
  • 2022-10-16
  • 2013-08-25
相关资源
最近更新 更多