【问题标题】:Laravel 5.5 not found class with correct namespaceLaravel 5.5 找不到具有正确命名空间的类
【发布时间】:2018-05-11 21:10:28
【问题描述】:

我的./app 文件夹如下所示:

+-- app
   +-- Classes
       +-- Events
          +-- EventBase.php
          +-- EventX.php

EventX 文件没有什么秘密:

<?

namespace App\Classes\Events;

class EventX {
  // ...
}

EventBase.php 代表一个 Facade,在它里面我只是尝试实例化一个 EventX

public function someMethod() {
  new \App\Classes\Events\EventX;
  // ...
}

在这一行之后,Framework 抛出一个异常,告诉该类未找到:

Symfony\Component\Debug\Exception\FatalThrowableError (E_ERROR)
Class 'App\Classes\Events\EventX' not found

即便如此:

file_exists(__DIR__ . '\EventX.php'); // true

我在尝试创建 Facades 之前已经遇到过这个问题,并通过从当前目录移动类文件并在移回后解决了这个问题(是的,我不知道为什么,但它确实有效)。

有些东西告诉我这是自动加载过程的问题,所以我尝试了这些命令(但仍然无法正常工作):

php artisan cache:clear

php artisan clear-compiled

php artisan config:clear

composer dump-autoload

我可以做些什么来调查问题?

【问题讨论】:

  • 我不确定,但可能是一个领先的`\`导致它?但是,仅供参考,您可以直接调用没有其命名空间的类,因为它出现在同一目录中。
  • @Chay22 我知道并尝试过,即使没有复杂的结构,这也不是命名空间问题。好像是自动加载问题
  • 嗯,那很难。您是否尝试过删除供应商目录并执行 composer 重新安装?
  • "\" 不会导致它,因为它只是设置类命名空间的绝对方式。 \App\Classes\Events\EventXEventX 在这种情况下具有相同的输出...
  • @Chay22 软件包已重新安装,但问题依旧。

标签: laravel laravel-5 namespaces composer-php autoload


【解决方案1】:

您需要将新的命名空间添加到您的 composer.json 到键“psr-4”

    "psr-4": {
        "App\\": "app/",
        "Classes\\": "app/classes/"

否则作曲家无法检测到您的新命名空间

另一种方法可以在这里找到: https://stackoverflow.com/a/28360186/6111545

【讨论】:

    【解决方案2】:

    我认为问题在于 php 标签

    <?php
    
    namespace App\Classes\Events;
    
    class EventX {
      // ...
    }
    

    PHP 还允许使用短打开标记 (不鼓励这样做,因为它仅在使用 short_open_tag php.ini 配置文件指令启用,或者 PHP 使用 --enable-short-tags 选项配置时才可用)。

    Link

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 2015-03-06
      • 2015-06-19
      • 2014-10-19
      • 2013-12-02
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多