【问题标题】:ReflectionException error on php artisanphp工匠上的ReflectionException错误
【发布时间】:2015-03-09 01:59:11
【问题描述】:

每当我运行 artisan 命令时,我都会收到以下错误消息:

{"error":{"type":"ReflectionException","message":"Class OrdersModel does not exist","file":"\/home\/vagrant\/Omono\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/Container.php","line":552}}

这只发生在我的流浪测试服务器上,而不是在生产中。我试过跑步

composer dump-autoload

等等。我已经签入了composer.json,里面有models文件夹。我还检查了 vendor/composer/autoload_classmap.php 并且它有我的映射:

'OrdersModel' => $baseDir . '/app/models/Orders.php',

我不确定在纠正这个问题时还可以尝试什么。

编辑:请注意,我对 OrdersModel 或实际 larvel 应用程序上的任何其他类没有任何问题。

EDIT2 (重要吗??):因此,通过将跟踪语句添加为详细似乎不起作用的艰苦任务,我发现问题出在创建服务提供者时,归结为在应用程序中创建“单例”。我没有编写此代码,但看起来有一个接口(OrderRepositoryInterface)和一个映射到它的实现(DbOrderRepository)。文件开头如下

<?php namespace Omono\Repositories;

use OrdersModel as Order;

所以无论出于何种原因,它都在此处寻找 OrderModels 却找不到它。我很确定这个模块在实际的网络应用程序中没有问题。所以由于某种原因,它在这个文件夹中找不到 OrdersModel,只有在运行 artisan 时。

EDIT3:

php -v 给出:

PHP Warning:  Module 'mongo' already loaded in Unknown on line 0
PHP 5.5.12-2+deb.sury.org~trusty+1 (cli) (built: May 12 2014 13:48:43) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

我还应该指出,当我访问该网站时一切正常。 OrdersModel 可以毫无问题地完成它应该做的事情,并且我没有收到任何错误。这仅在运行 artisan 命令时发生。也许不相关的是,每次我更新我的流浪测试服务器(有问题的服务器)时,我都需要运行 composer dumpautoload 以使几个类工作。

【问题讨论】:

  • Orders.php 是否存在于 'app/models/' 中?该文件是否包含名为“OrdersModel”的类?
  • Orders.php 确实存在,并且包含 OrdersModel 类,它扩展了 Eloquent。
  • 命名空间问题? Orders.php 中声明了什么命名空间,应用的根命名空间是什么?
  • 如果你从命令行输入php -v会发生什么?你运行的是什么版本?
  • 没有声明命名空间,所以默认命名空间。据我所知,它与模型文件夹中的所有其他模型(~30)相同,尽管这个模型要大得多(~1500 行)。

标签: php laravel laravel-4 laravel-artisan


【解决方案1】:

好吧,在玩了很多之后,我设法解决了这个问题。这是一个非常具体的问题,但我会发布我的答案以防万一有人发现这个问题。

因此,从编辑 2 开始,我决定注释掉 serviceprovider 中引用此类的行...交叉手指...它起作用了。的种类。由于行使用日志,它实际上吐出了一个错误;在我的代码中。有趣的。让我们删除它。有用。所以我取消了我的课的注释,在课堂上我注意到我也使用了 Log。在这种情况下,它不在默认命名空间中,所以这是正确的,但我实际上并没有在任何地方调用 Log,所以,到底是什么,不妨将其删除。没有骰子。然后在这个类和一个几乎相同的类之间来回切换。我注意到了

use MyApp\Repositories\OrderRepositoryInterface;

等一下。这不是必需的;因为这是在同一个命名空间中。我删除了那条线。低,看哪,一切都是固定的。

总结;嗯……我不知道。我根本不知道错误消息是什么意思,但基本上只是在您的服务提供商中检查这些内容。我还看到很多人因为使用而不是 .

而遇到问题。

【讨论】:

    猜你喜欢
    • 2014-05-17
    • 2018-05-07
    • 2016-08-17
    • 2017-06-20
    • 2016-06-16
    • 1970-01-01
    • 2017-11-29
    • 2015-11-25
    • 2018-04-18
    相关资源
    最近更新 更多