Laravel: как создать ресурс, который зависит от нескольких моделей - PullRequest
0 голосов
/ 11 сентября 2018

Мне нужно создать ресурс, который должен собирать информацию из нескольких моделей.

В данный момент я создаю обычный ресурс:

$movieResource = new MovieResource($movie);

Внутри MovieResource::toArray(): *Класс 1007 *

public function toArray($request)
{
    $this->initRepos(); // initializing used repositories as static fields

    $movieData = [ // transforming model to resource
        'title' => $this->title,
    ];

    $this->attachSounds($movieData); // Uses two unrelated tables
    $this->attachUrl($movieData);    // Uses one unrelated table
    $this->attachAnotherInfo($movieData); // Uses one unrelated table

    return $movieData;
}

MovieResource используется в нескольких разных местах проекта.Чтобы не дублировать логику, я решил внедрить репозитории в ресурс.

В некоторых местах MovieResource широко используется, поэтому используемые репозитории инициализируются как статические свойства класса MovieResource (чтобы избежать инициализации нескольких экземпляров))

Такая структура, однако, имеет некоторые ограничения: тестирование практически невозможно, поскольку статические методы не могут быть смоделированы.Класс ресурсов должен быть как можно более простым, но теперь он перегружен.

Я знаю, что текущее решение далеко от идеального, поэтому я прошу вас о помощи, совете или опыте по поводу того, как текущее решениеможет быть улучшено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...