【问题标题】:Laravel extend Eloquent when creating modelLaravel 在创建模型时扩展 Eloquent
【发布时间】:2015-03-25 05:21:10
【问题描述】:

在 Laravel 中创建基本模型时,我扩展了 Eloquent 类,以便我的模型具有所有令人敬畏的 Eloquent 功能。例如:

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

我一直在阅读 Laravel 框架源代码,但我不明白这个 Eloquent 类实际上来自哪里。我可以看到有一个 Illuminate\Database\Eloquent\Model 类,它似乎具有我正在扩展的 Eloquent 类所期望的所有功能,但我很困惑继承是如何实际工作的,因为我正在扩展Eloquent,不是Illuminate\Database\Eloquent\Model

这是如何工作的?

【问题讨论】:

    标签: php laravel laravel-4 eloquent


    【解决方案1】:

    如果您查看文件“config/app.php”的内容,您会在文件底部找到一个“别名”键。这就是在幕后做所有魔术的原因。 Laravel 允许你给类起别名,你也可以将你的类添加到“config/app.php”文件中,这样你就不必在任何地方的代码中使用长的、完全限定的名称。

    如您所见,您要扩展的实际类是“Illuminate\Database\Eloquent\Model”,别名为“Eloquent”,因此您只需要扩展“Eloquent”。

    【讨论】:

    • 这个别名是如何工作的?如果我扩展Eloquent,PHP 怎么不会抛出找不到类 Eloquent 的错误?我正在努力寻找实现这一目标的代码。
    • 我确信框架内部发生了很多事情,但这是一个起点。查看 vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php use Illuminate\Support\Facades\Facade; use Illuminate\Foundation\AliasLoader; use Illuminate\Contracts\Foundation\Application; Facade::setFacadeApplication($app); AliasLoader::getInstance($app['config']['app.aliases'])->register(); 的文件
    • 谢谢。在config/app.php 的这个数组中,我还看到'SoftDeletingTrait' => 'Illuminate\Database\Eloquent\SoftDeletingTrait' 的条目。如果存在,为什么我需要使用软删除特征在每个模型的顶部包含这一行? use Illuminate\Database\Eloquent\SoftDeletingTrait;。我不应该只能够在模型中use SoftDeletingTrait; 而不导入命名空间吗?
    • 你试过只使用use SoftDeletingTrait 吗?我认为这也应该有效,您不需要完全限定的名称。
    • 在其核心,类别名使用 php 函数 class_alias() 来工作。
    猜你喜欢
    • 2020-06-19
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2016-07-19
    • 2015-01-10
    • 1970-01-01
    相关资源
    最近更新 更多