Я использую пакет 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 и т. Д.) Вместе с полным именем модели.
Мне нужны предложения, чтобы обойти эту проблему и включить кэширование.конфига.