2015-01-04 1 views
0

У меня возникли проблемы с внедрением Fractal. Я пытаюсь включить сообщения с определенным пользователем.Как сделать доступнымВключить работу в партию/фрактал

Все идет хорошо, когда я добавляю «сообщения» в $ defaultIncludes наверху моего UserItemTransformer. Сообщения включаются, как ожидалось. Однако сообщения не включены в мой выходной JSon при изменении $ defaultIncludes в $ availableIncludes, даже после вызова $fractal->parseIncludes('posts');

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

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

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

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

Это делает не работы:

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

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

ответ

2

Понял!

Когда я вызывал parseIncludes ('posts'), это было на новом экземпляре Fractal, введенном в метод контроллера. Конечно, я должен был бы вызвать parseIncludes() в экземпляре 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()); 
} 

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

+0

Пожалуйста, отметьте свой ответ как можно скорее, чтобы вопросы не оставались без ответа. –

+0

Спасибо за сообщение Отвечено! Он мне нужен :) – Neto