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


Laravel Namespace, how does it work?

我是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

因此,当您将名称空间更改为与目录路径相对应的名称空间时,它是有效的。