我是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
属性有关吗?我很困惑。
您的类可能是由composer加载的。它的内容是什么——特别是autoloading
部分?
我想它是按照PSR-4标准加载的,该标准遵循控制器名称''文件名模式。
含义:
- 在
app/Variant.php
中查找App'Variant
- 在
app/models/Variant.php
中查找App'Models'Variant
因此,当您将名称空间更改为与目录路径相对应的名称空间时,它是有效的。