Задача
У меня есть модель с трансформированным отношением, и эти разные типы отношений имеют совершенно разные ресурсы json для возврата.Поэтому я пытаюсь найти способ разрешить правильный класс отношений и вернуть его с ресурсом базовой модели.
Например, если у меня есть комментарий и трансформированное отношение «commentable», содержащее экземпляры модели Car и Driver.Теперь, если бы я попросил некоторый комментарий, я смог бы вернуть правильный ответ json, сохраненный в CarResource или PeopleResource.
{
id: 1,
text: 'A comment',
commentable_type: 'Car', // could be car or driver
commentable_data: {
model: 'Ford',
year: 2019
},
id: 2,
text: 'An another comment',
commentable_type: 'Driver',
commentable_data: {
name: 'Jon Doe',
active: true
},
}
Попытка решить
Я пытался использовать следующее, но получил ошибку.
public function toArray($request)
{
$modelClass = app(__NAMESPACE__ . '\\' . class_basename($this->commentable) . 'Resource');
return [
'id' => $this->id,
'text' => $this->text,
'commentable_type' => class_basename($this->commentable),
'commentable_data' => new $modelClass($this->commentable),
];
}
Если разрешенный класс не существует, я, конечно, получаю
ReflectionException (-1)
Приложение класса\ Http \ Resources \ CarResource не существует
Но если класс существует, я получаю следующую ошибку
Подсветка \ Контракты \ Контейнер \ BindingResolutionException
Разрешение неразрешимых зависимостей [Параметр # 0 [$ resource]] в классе Illuminate \ Http \ Resources \ Json \ JsonResource
Вопрос
Что вы думаете?Есть ли у вас какое-либо решение или рекомендации, например, как лучше управлять этим?