Php Laravel名称空间,它是如何工作的?
我是新来的拉威尔5,我想有人向我解释拉威尔的名字空间是如何工作的 因此,我在Php Laravel名称空间,它是如何工作的?,php,laravel,namespaces,composer-php,Php,Laravel,Namespaces,Composer Php,我是新来的拉威尔5,我想有人向我解释拉威尔的名字空间是如何工作的 因此,我在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
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.php
中的命名空间从namespace App
更改为namespace App\Models
,并将route.php
中的命名空间从use App\Variant
更改为use App\Models\Variant
,一切都会神奇地工作
为什么呢?它是否与php名称空间或composer.json中的classmap
属性有关?我很困惑 您的类可能是由composer加载的。它的具体内容是什么-自动加载
部分
我猜它是按标准加载的,这尊重控制器名\文件名模式
意思是:
App\Variant
在App/Variant.php
App\Models\Variant
在App/Models/Variant.php
因此,当您将名称空间更改为与目录路径对应的名称空间时,它会起作用。如果文件是app/models/Variant.php
,则名称空间将是app\models
,use
将是app\models\Variant
。为什么您认为它应该是App
和App\Variant
?请参阅laravel的自动加载工作原理