2015-01-04 5 views
0

Fractal includes를 구현하는 데 문제가 있습니다. 특정 사용자의 게시물을 포함하려고합니다.availableplecdes를 thephpleague/fractal에서 사용하려면

내 'UserItemTransformer 맨 위에 $ defaultIncludes'에 'posts'를 추가하면 모두 잘됩니다. 게시물은 예상대로 포함됩니다. 심지어 문제는 내가 사용하는 경우 게시물을 포함하는 방법에만 호출된다는 사실을 거짓말을 보인다 $fractal->parseIncludes('posts');

를 호출 한 후, availableIncludes$에 $ defaultIncludes을 변경할 때 그러나 게시물은 내 JSON 출력에 포함되지 않습니다 $ 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

질문에 답이없는 것 같지 않은 답변을 표시하십시오. –

+0

답변을 주셔서 감사합니다! 나는 그가 필요하다 :) – Neto