16

我正在尝试在全新安装的 Laravel 中创建一个简单的类。为此,我创建了一个文件夹 app/Convert 并将 php 文件放在那里。该类如下所示:

<?php 

namespace App\Convert;

class Converter
{
    public function __construct()
    {
        ...Code
    }
}

现在,当我尝试从 Tinker 访问它时:

use App\Convert\Converter;
new Converter;

我得到:

PHP Fatal error:  Class 'App/Convert/Converter' not found in Psy Shell code on line 1

我究竟做错了什么?据我了解,laravel 应该自动执行 app 文件夹及其子文件夹中的文件,还是我弄错了?

编辑:对不起,我第一次写错了(我只是在命名空间上玩了这么多,所以我拿错了版本)。问题实际上是文件名不是 Converter.php,所以当我将其更改为 Converter.php 时,事情开始发生变化。如果他将 Devon 的答案作为答案而不是评论,我会将其设置为正确答案。所以写在这里:

包含类的文件名应与类名相同。并且文件的路径与命名空间路径相同。(请参阅他的答案下方的马修评论)

4

2 回答 2

42

有时需要清除缓存,这个命令在我的情况下有效:

composer dump-autoload

我希望它也适合你

问候

于 2019-08-06T12:21:10.880 回答
10

您在类中的命名空间与您尝试导入它的方式不同。你把它设置在App\Convert那里。您需要将其导入为App\Convert\Converter.

类的完全限定类名包括命名空间和类名。因此,例如,如果您有Bar一个命名空间为App\Foo的类,则完全限定的类名是App\Foo\Bar,并且为了能够将其用作Bar,您需要按如下方式导入它:

use App\Foo\Bar;

此外,正如 Devon 下面所说,您需要拥有包含该类的文件,app/Foo/Bar.php以便默认 Laravel 自动加载器配置来获取它。

于 2018-07-08T14:57:43.777 回答