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

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

Все идет хорошо, когда я добавляю сообщения $ defaultIncludes в верхней части моего UserItemTransformer. Сообщения включены, как и ожидалось.
Тем не менее, сообщения НЕ включаются в мой вывод json, когда я изменяю $ defaultIncludes на $ availableIncludes, даже после звонка $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');

0

Решение

Понял!

Когда я вызывал 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());
}

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]