Laravel 5.5 找不到具有正确命名空间的类

Posted

技术标签:

【中文标题】Laravel 5.5 找不到具有正确命名空间的类【英文标题】:Laravel 5.5 not found class with correct namespace 【发布时间】: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 软件包已重新安装,但问题依旧。 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

我认为问题在于 php 标签

<?php

namespace App\Classes\Events;

class EventX 
  // ...

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

Link

【讨论】:

以上是关于Laravel 5.5 找不到具有正确命名空间的类的主要内容,如果未能解决你的问题,请参考以下文章

在命名空间中定义控制器仍然发生在 laravel 5.5 中的 Class App\Http\Controllers 错误

laravel 在 php 5.5 中找不到 mcrypt 扩展

找不到类[Laravel 5.5,制作项目]

有问题,找不到类型或命名空间名称“List”

在构建过程中出现错误“找不到类型或命名空间名称”

Laravel 5 应用命名空间