Я использую проекцию на основе Laravel под названием Akaunting .
В проекте есть модели, например у них есть модель App\Models\Banking\Account
I Я пытаюсь создать 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));
}
}