【问题标题】:Laravel Namespace, how does it work?Laravel 命名空间,它是如何工作的?
【发布时间】:2015-09-10 00:03:52
【问题描述】:

我是 Laravel 5 的新手,我希望有人向我解释一下 Laravel 的命名空间是如何工作的。

所以我在app/models/Variant.php 中有一个名为Variant 的类,我的代码如下所示

namespace App;
use Illuminate\Database\Eloquent\Model;
class Variant extends Model{
  /*Some code*/
}

在我的route.php 我有:

use App\Variant;
/*calls Variant::all() some where in code*/

然后我收到一条错误消息,提示 Variant 未定义。但是,如果我将Variant.php 中的命名空间从namespace App 更改为namespace App\Models,并将route.php 中的命名空间从use App\Variant 更改为use App\Models\Variant,那么一切都会神奇地起作用。

这是为什么呢?它是否与 php 命名空间或 composer.json 中的 classmap 属性有关?我很迷茫。

【问题讨论】:

  • 如果文件为app/models/Variant.php,则命名空间为App\ModelsuseApp\Models\Variant。为什么你会认为应该是AppApp\Variant
  • 查看 PSR-4 autoloading standard 了解 laravel 的自动加载是如何工作的

标签: php laravel namespaces composer-php


【解决方案1】:

您的类可能由作曲家加载。它的内容是什么 - 特别是autoloading 部分?

我猜它是由PSR-4 标准加载的,它尊重director-name\file-name 模式。

意思:

  • app/Variant.php中寻找App\Variant
  • App\Models\Variantapp/models/Variant.php 中寻找

因此,当您将命名空间更改为与您的目录路径对应的命名空间时,它会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 2017-05-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多