Laravel 5 应用命名空间

Posted

技术标签:

【中文标题】Laravel 5 应用命名空间【英文标题】:Laravel 5 App Namespace 【发布时间】:2015-05-13 01:31:06 【问题描述】:

我是 Laravel 5 的新手。

我设置了原始应用并在 Homestead 中运行。当我编写了一个简单的 UserTableSeeder 并尝试使用 artisan 为 mysql 数据库播种时,弹出一个错误:“找不到类用户”。

好吧,我没有更改“app/User.php”文件中的任何内容,并且在将命名空间 App 添加到播种代码后,

即从

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

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

播种工作得很好。

当我尝试使用时发生了同样的事情

User::all();

或“routes.php”中的其他 Eloquent 查询操作。只有当我添加命名空间 App\ 时它才会起作用。

我已尝试 composer dump-autoload 并确保应用名称和“composer.json”文件与 Laravel 5 中的原始代码完全相同。

每当我们想使用 Laravel 5 中的模型时,是否必须添加命名空间 App/

我想我可能搞错了,因为在 Laravel 4 中我们不必在这些情况下添加命名空间 App

【问题讨论】:

【参考方案1】:

在 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 中的不同。这让我很困惑,因为我不了解作曲家的工作原理。 没问题。 PSR-4 只是自动加载的标准。您可以在此处阅读更多信息:php-fig.org/psr/psr-4。你不需要知道什么太复杂,只是你的应用程序目录下的文件应该以遵循文件夹结构的方式命名。每次添加新类时都不需要转储自动加载,因为整个目录都是自动加载的 知道了。非常感谢!

以上是关于Laravel 5 应用命名空间的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.7 使用某些命名空间的资源控制器路由名称是啥?

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

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

laravel5.4PHP5.6+ 调用命名空间下类方法属性和对象

Laravel 的 auth 命名空间中没有定义命令

Laravel 4无法从命名空间控制器中找到BaseController