2015-01-04 16 views
0

我很难实现分形包括。我正在尝试包含特定用户的帖子。如何使availableIncludes工作在/格

当我在我的UserItemTransformer顶部添加'posts'到$ defaultIncludes时,一切顺利。帖子按预期包含在内。 然而,职位不包括在我的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()来做实际的解析(并且我将其他位置注入到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

请标记你的答案是正确的,这样的问题似乎并没有答案。 – 2015-01-06 03:11:37

+0

感谢发布回答!我需要他 :) – Neto 2016-10-19 17:34:38