2015-01-26 38 views
2

在Laravel中創建基本模型時,我擴展了Eloquent類,以便我的模型具有所有令人敬畏的Eloquent功能。例如:Laravel在創建模型時擴展了口才

class Product extends \Eloquent { 
    //class definition here 
} 

我一直在讀通過Laravel框架源代碼,我不明白的地方這Eloquent類實際上來自。我可以看到有一個Illuminate\Database\Eloquent\Model類,它似乎具有我期望從Eloquent類擴展的所有功能,但是我很困惑繼承是如何工作的,因爲我擴展了Eloquent而不是Illuminate\Database\Eloquent\Model

這是如何工作的?

回答

2

如果您查看文件「config/app.php」的內容,您會在文件底部找到「別名」鍵。這就是發動機罩下的所有魔法。 Laravel允許你別名類,你也可以將它添加到「config/app.php」文件中,這樣你就不必在代碼中使用長且完全限定的名字。

正如你所看到的,你正在擴展的實際類是「Illuminate \ Database \ Eloquent \ Model」,它的別名爲「Eloquent」,因此你只需要擴展「Eloquent」。

+0

這個別名是如何工作的?如果我擴展'Eloquent',那麼PHP不會拋出類未找到類錯誤的錯誤?我試圖找到實現這一目的的代碼。 – flyingL123 2015-01-26 18:24:37

+0

我相信框架內部發生了很多事情,但這是一個起點。 查看供應商/ laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php文件 '使用Illuminate \ Support \ Facades \ Facade; 使用Illuminate \ Foundation \ AliasLoader; 使用Illuminate \ Contracts \ Foundation \ Application; Facade :: setFacadeApplication($ app); AliasLoader :: getInstance($ app ['config'] ['app.aliases']) - > register();' – 2015-01-26 18:29:06

+0

謝謝。在'config/app.php'中的這個數組中,我還看到了'SoftDeletingTrait'=>'Illuminate \ Database \ Eloquent \ SoftDeletingTrait'的條目。如果存在這種情況,爲什麼我需要使用軟刪除特性將此行包含在每個模型的頂部? '使用Illuminate \ Database \ Eloquent \ SoftDeletingTrait;'。我不應該只在模型中使用SoftDeletingTrait;而不需要導入命名空間? – flyingL123 2015-01-26 18:33:00