0

我在实施 Fractal 包含时遇到了麻烦。我正在尝试包含特定用户的帖子。

当我在我的 UserItemTransformer 顶部将“帖子”添加到$defaultIncludes时,一切顺利。帖子按预期包含在内。但是,当我将 $defaultIncludes 更改为$availableIncludes时,即使在调用之后,帖子也不包含在我的 json 输出中$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');
4

1 回答 1

2

知道了!

当我调用 parseIncludes('posts') 时,这是在一个新的 Fractal 实例上,注入到控制器方法中。当然,我应该在进行实际解析的 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());
}

我现在就坐在一个角落里,然后真正退出一段时间。

于 2015-01-04T15:22:50.267 回答