php - 从包中扩展 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));
}
}
解决方案
推荐阅读
- c# - 可以在 C# 中简化此开关和 while 循环吗?
- python-2.7 - 在 python 中使用 Squish,打印的文本在哪里打印?
- python - Django Rest Framework url 过滤器,导入视图错误
- c# - .net-core 应用程序和 mashine.config(s) 中的空 DbProviderFactories
- glsl - 如何将着色器作为外部文件包含在内
- c++ - 大括号初始化列表和无符号类型
- r - R - 如何使用 color2d.matplot 为值分配颜色
- validation - Springboot 验证异常:org.springframework.validation.BeanPropertyBindingResult 异常
- path - 无法统计筛子存储路径:废话路径
- javascript - 使用 JavaScript 输入印地语