Laravel 5 应用程序命名空间

3

我是一名 Laravel 5 的新手。

我在 Homestead 上设置了原始应用程序并运行。当我编写了一个简单的 UserTableSeeder 并尝试使用 artisan 种子填充 MYSQL 数据库时,出现了一个错误:"找不到 User 类"。

好吧,我没有改变 "app/User.php" 文件中的任何内容,并且在种子代码中添加了命名空间 App 后,

也就是说,从

User::create(array(..));

to

App\User::create(array(..));

种子文件已经成功下载了。
在我尝试使用时,发生了同样的事情。
User::all();

在 "routes.php" 文件中执行其他 Eloquent 查询操作时,只有当我添加 App\ 命名空间时它才能正常工作。

我尝试过使用 composer dump-autoload 命令,并确保应用名称和 "composer.json" 文件与 Laravel 5 中的原始代码完全相同。

在 Laravel 5 中,我们是否必须每次都添加 App/ 命名空间才能使用模型?

我认为我可能搞错了什么,因为在 Laravel 4 中,在这些情况下我们不需要添加 App 命名空间。

1个回答

6
在 Laravel 5 中,默认情况下,app 目录被命名空间为 App。如果您查看 composer.json 文件,您将看到 app 目录已设置为 psr-4 自动加载:
"psr-4": {
    "App\\": "app/"
},

当你想要使用一个来自外部或者子目录的类时,需要包含命名空间。如果只是想引用类名,则可以使用use。例如:

app/Namespace/SomeClass.php

<?php namespace App\Namespace;

use App\User;

class SomeClass {

    public function someMethod()
    {
        $user = User::find(1);
    }

}

谢谢您的回答!我实际上不明白 "psr-4": { "App\\": "app/" } 是什么意思。而且在“autoload”下的"classmap"和Laravel 4.2中的不同。这让我非常困惑,因为我没有理解composer的工作原理。 - Vonryan
没问题。PSR-4只是自动加载的标准。您可以在此处阅读更多信息:http://www.php-fig.org/psr/psr-4/。您需要知道的并不太复杂,只是您应该以遵循文件夹结构的方式对应用程序目录下的文件进行命名空间设置。由于整个目录是自动加载的,因此您无需每次添加新类时都卸载自动加载。 - Jonathon
明白了。非常感谢! - Vonryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接