我是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
属性有关?我很迷茫。
答案 0 :(得分:0)
您的课程可能由作曲家加载。它的内容是什么 - 特别是autoloading
部分?
我猜它是由PSR-4标准加载的,它遵循director-name \ file-name模式。
含义:
App\Variant
中寻找app/Variant.php
在App\Models\Variant
app/models/Variant.php
因此,当您将命名空间更改为与目录路径对应的命名空间时,它可以正常工作。