Laravel命名空间,它是如何工作的?

时间:2015-06-24 00:06:27

标签: php laravel namespaces composer-php

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

所以我在Variant中有一个名为app/models/Variant.php的类,我的代码看起来像这样

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属性有关?我很迷茫。

1 个答案:

答案 0 :(得分:0)

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

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

含义:

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

因此,当您将命名空间更改为与目录路径对应的命名空间时,它可以正常工作。