я использую nWidarts/laravel-modules
пакет для расширения функциональности приложения. Для интеграции модулей Models с основным приложением требуется «приклеить» родительский объект к дочерним объектам модуля. Хитрость заключается в том, что модуль не может добавить отношение к базовой модели, поэтому он должен извлекать отношение «динамически».
На данный момент я достигаю этого, используя следующее определение, которое я загружаю в конфиг модуля.
return [
'client' => [
'notes' => function ($self) {
return $self->hasMany('Modules\Notes\Entities\Note');
}
],
В основном, у нас есть одна вспомогательная функция в BaseModel, которая может автоматически разрешать отношения, используя следующие
<?php
public function __call($method, $params)
{
$entity = strtolower(class_basename($this));
if ($entity) {
$configPath = "modules.relations.$entity.$method";
if (config()->has($configPath)) {
$function = config()->get($configPath);
return $function($this);
}
}
return parent::__call($method, $params);
}
Все это прекрасно работает, однако мы теряем возможность кэшировать конфигурацию из-за использования замыкания в файле конфигурации. Мне нужно провести рефакторинг файла конфигурации, чтобы передать обратно тип отношения (hasOne, hasMany и т. Д.) Вместе с FQN модели.
Мне нужны предложения, чтобы обойти эту проблему и включить кэширование конфигурации.
Задача ещё не решена.
Других решений пока нет …