首页 > 解决方案 > 从包中扩展 Laravel 项目模型

问题描述

我正在使用基于 Laravel 的名为Akaunting的投影。

在项目中它有模型,例如他们有一个模型App\Models\Banking\Account

我正在尝试制作一个Package,我只能将代码添加到我的Package(无法编辑主 Laravel 项目中的文件。

如何扩展App\Models\Banking\Account模型以使其具有一些其他方法;这样在项目中使用App\Models\Banking\Account模型的任何地方,项目都可以访问我添加的方法。

目前,我能够做到这一点的唯一方法是使用class_alias我自己的自定义模型完全替换原始模型,register()方法是将其添加到我的包服务提供程序中的方法中:

class_alias('Modules\BankingSortCode\Models\Account', 'App\Models\Banking\Account');

但这意味着我必须将 的全部内容复制App\Models\Banking\Account到我的新定制模型中Modules\BankingSortCode\Models\Account

这样做的问题是,如果原始项目更新了他们的App\Models\Banking\Account模型,那么运行我的包的任何人都不会使用更新的模型(并可能破坏整个站点)

我希望能够扩展原始模型,但如果我尝试这样做,我会得到一个我试图重新声明的异常App\Models\Banking\Account (请参阅下面我希望能够执行的示例):

<?php
namespace Modules\BankingSortCode\Models;

class Account extends \App\Models\Banking\Account {
    public function getSortCodeFormatAttribute(){
        return implode("-", str_split($this->bank_sort_code, 2));
    }

}

标签: phplaravel

解决方案


推荐阅读