Laravel 5.8-从5.7更新到5.8后无法从服务容器解析实例

时间:2019-04-12 12:47:56

标签: laravel laravel-5

  • Laravel版本:5.8.11
  • PHP版本:7.1.26(Homestead)-并在7.2上进行了测试,结果相同

由于从5.7更新到5.8,我再也无法解析实例了。它返回一个字符串,我得到Trying to get property of non-object

复制步骤:

我将中间件中的实例绑定为:

$globals = new Globals();
app()->instance('App\Helpers\Globals', $globals);
$globals->brows_browser = Agent::browser();

稍后尝试使用以下方法解决该问题时(例如在web.php中):

$browser = resolve('App\Helpers\Globals')->brows_browser;

我收到错误异常Trying to get property of non-object。 $ browser是字符串“ Helpers \ Globals”,而不是对象。以前在所有Laravel版本中都能正常工作。

namespace App\Helpers;

class Globals
{
    public $brows_browser;
    public $brows_device;
    public $brows_platform;
    public $brows_version;
}

我还尝试将实例绑定到路由(web.php)中,并且产生了相同的结果。

当我查看resolve('App\Helpers\Globals')时,它是一个字符串“ App \ Helpers \ Globals”,而不是一个对象。

有人知道吗?这可能是L5.8中的错误吗?

谢谢

更新:

这不是错误。 我已经在作曲家中安装了goetas-webservices/xsd2php-runtime,这会引起问题。我真的不知道为什么以及要怎么做。

这些是安装的依赖项。我需要这个包,我有点死胡同了:

Package operations: 17 installs, 0 updates, 0 removals
  - Installing jms/metadata (2.0.0): Loading from cache
  - Installing hoa/exception (1.17.01.16): Loading from cache
  - Installing hoa/event (1.17.01.13): Loading from cache
  - Installing hoa/consistency (1.17.05.02): Loading from cache
  - Installing hoa/zformat (1.17.01.10): Loading from cache
  - Installing hoa/protocol (1.17.01.14): Loading from cache
  - Installing hoa/iterator (2.17.01.10): Loading from cache
  - Installing hoa/visitor (2.17.01.16): Loading from cache
  - Installing hoa/ustring (4.17.01.16): Loading from cache
  - Installing hoa/compiler (3.17.08.08): Loading from cache
  - Installing hoa/regex (1.17.01.13): Loading from cache
  - Installing hoa/math (1.17.05.16): Loading from cache
  - Installing hoa/stream (1.17.02.21): Loading from cache
  - Installing hoa/file (1.17.07.11): Loading from cache
  - Installing doctrine/annotations (v1.6.1): Loading from cache
  - Installing jms/serializer (2.2.0): Loading from cache
  - Installing goetas-webservices/xsd2php-runtime (v0.2.9): Loading from cache
jms/serializer suggests installing doctrine/collections (Required if you like to use doctrine collection types as ArrayCollection.)
Writing lock file

更新2:

我进一步深入研究,看来hoa / compiler(特别是hoa / stream)与Laravel 5.8不兼容

hoa / compiler是jms / serializer的依赖项。

那真的很糟糕,因为jms / serializer对我们来说是不可替代的!

2 个答案:

答案 0 :(得分:0)

在laravel 5.8中像这样的简单绑定请小心,将在服务提供商中注册,

$this->app->bind('App\Helpers\Globals', function () {
   return new App\Helpers\Globals();
});

您可以使用品牌

$globals = $this->app->make('App\Helpers\Globals');

答案 1 :(得分:0)

这不是Laravel错误,而是与hoa / compiler(特别是hoa / stream)不兼容。

hoa / compiler是jms / serializer的依赖项。

因此,目前jms / serializer不能与Laravel 5.8配合使用