Как сделать доступным Включает работу в thephpleague/fractal

У меня возникли проблемы с реализацией фрактала. Я пытаюсь включить сообщения с конкретным пользователем.

Все идет хорошо, когда я добавляю 'posts' в $ defaultInclude в верхней части моего UserItemTransformer. Сообщения включены, как и ожидалось. Тем не менее, сообщения НЕ включаются в мой вывод json, когда я меняю $ defaultInclude на $ availableInclude, даже после вызова $fractal->parseIncludes('posts');

Кажется, проблема заключается в том, что метод, который включает в себя сообщения, вызывается только тогда, когда я использую $ defaultInclude. он никогда не вызывается, когда я использую $ availableInclude.

Я, наверное, здесь упускаю что-то очевидное. Можете ли вы помочь мне узнать, что это такое?

Это работает:

// [...] Class UserItemTransformer
protected $defaultIncludes = [
    'posts'
];

Это не работает:

// [...] Class UserItemTransformer
protected $availableIncludes = [
    'posts'
];

// [...] Class PostsController
// $fractal is injected in the method (Laravel 5 style)
$fractal->parseIncludes('posts');

1 ответ

Понял!

Когда я вызывал parseInclude ('posts'), это было на новом экземпляре Fractal, внедренном в метод контроллера. Конечно, я должен был вызвать parseInclude () для экземпляра Fractal, который выполнял фактический синтаксический анализ (и который я внедрил где-то еще, в класс Api).

public function postsWithUser($user_id, Manager $fractal, UserRepositoryInterface $userRepository)
{
    $api = new \App\Services\Api();
    $user = $userRepository->findById($user_id);
    if ( ! $user) {
        return $api->errorNotFound();
    }

    $params = [
        'offset' => $api->getOffset(),
        'limit'  => $api->getLimit()
    ];
    $user->posts = $this->postRepository->findWithUser($user_id, $params);

    // It used to be this, using $fractal, that I injected as method parameter
    // I can now also remove the injected Manager $fractal from this method
    // $fractal->parseIncludes('posts');

    // I created a new getFractal() method on my Api class, that gives me the proper Fractal instance
    $api->getFractal()->parseIncludes('posts');
    return $api->respondWithItem($user, new UserItemTransformer());
}

Я просто пойду сижу в углу и действительно буду на некоторое время уйти.

Другие вопросы по тегам