2017-04-07 24 views
0

如您所知,laravel-fractal是API開發的最大包裝之一。 從今天開始,我正面臨着一個問題,當我嘗試將代碼部署到遠程服務器時,會引發像標題一樣的錯誤。我想讓你知道,在我的本地機器上完美地構建作品。Laravel 5.4 - Fractal.php行348中的InvalidTransformation。

當我在UserTransformer中的$用戶,所有屬性看起來不錯,它是一個用戶實例預期。我也有類別,新聞和網頁變壓器相同的問題。有一個變壓器工作,但結構相同,所以我無法弄清楚發生了什麼事情。

這裏是我的代碼片段:

UserTransformer.php

class UserTransformer extends TransformerAbstract 
{ 

    protected $defaultIncludes = ['token']; 

    /** 
    * A Fractal transformer. 
    * @param User $user 
    * @return array 
    */ 
    public function transform(User $user) 
    { 
     return [ 
      'email' => $user->email, 
     ]; 
    } 

    public function includeToken(User $user){ 
     $token = $user->createToken('Access')->accessToken; 
     return $this->item($token,new TokenTransformer()); 
    } 
} 

TokenTransformer.php

class TokenTransformer extends TransformerAbstract 
{ 
    /** 
    * A Fractal transformer. 
    * @param $token 
    * @return array 
    */ 
    public function transform($token) 
    { 
     return [ 
      'token' => $token 
     ]; 
    } 
} 

api.php

Route::middleware('auth:api')->get('/user', function (Request $request) { 
    return fractal() 
     ->item($request->user()) 
     ->transformWith(new \App\Transformers\Auth\UserTransformer) 
     ->toArray(); 
}); 

錯誤:

InvalidTransformation in Fractal.php line 348: 
in Fractal.php line 348 
at Fractal->getResource() in Fractal.php line 333 
at Fractal->createData() in Fractal.php line 304 
at Fractal->toArray() in api.php line 20 
at Router->{closure}(object(Request)) in Route.php line 189 

也許我失去了一些東西,所以我張貼類別變壓器過

CategoryTransformer.php

class CategoryTransformer extends TransformerAbstract 
{ 

    protected $defaultIncludes = ['nodes']; 
    protected $availableIncludes = ['pages']; 

    /** 
    * A Fractal transformer. 
    * @param Category $category 
    * @return array 
    */ 
    public function transform(Category $category=null) 
    { 
     if($category){ 

      return [ 
       'parent' => $category->parent->slug ?? false, 
       'name' => $category->name, 
       'slug' => $category->slug, 
       'page_count' => $category->pages()->count(), 
       'info' => [] 
      ]; 
     } 

     return []; 

    } 


    public function includeNodes(Category $category){ 
     $nodes = $category->children; 
     return $this->collection($nodes,new CategoryTransformer,['nodes']); 
    } 


    public function includePages(Category $category){ 
     return $this->collection($category->pages,new PageTransformer()); 
    } 
} 

CategoryController.php

public function show(Category $category,Request $request){ 

    //API 

     return fractal() 
      ->item($category) 
      ->transformWith(new CategoryTransformer()) 
      ->parseIncludes(['pages','nodes.pages']) 
      ->toArray(); 


} 

感謝。

回答

0

挖一點後,我看到我的locale是TR其資本 'i' 是 'I',而不是 '我' 所以在Fractal.php線345

$resourceClass = 'League\\Fractal\\Resource\\'.ucfirst($this->dataType); 

回報League\Fractal\Resource\item代替League\Fractal\Resource\Item

我不知道如何解決它,而無需更改src代碼。但現在我改變了語言環境en爲api路線&控制器,似乎很好。