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\EventX
或 EventX
在这种情况下具有相同的输出...
@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 错误