如你所知,laravel-fractal是最好的API开发包之一。从今天开始,我面临着一个问题,当我试图将代码部署到远程服务器时,会抛出像标题这样的错误。我想让你知道,build在我的本地机器上运行得很好。
当我在UserTransformer中dd $user时,所有属性看起来都很好,而且不出所料,它是一个用户实例。我也有同样的问题,类别,新闻和页面转换器。有一个变压器在工作,但结构是相同的,所以我不知道发生了什么。
下面是我的代码片段:
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();
}谢谢。
发布于 2017-04-08 05:58:10
稍加研究后,我发现我的语言环境是tr,在Fractal.php第345行,大写的'i‘是'İ’,而不是'I‘。
$resourceClass = 'League\\Fractal\\Resource\\'.ucfirst($this->dataType);返回League\Fractal\Resource\item而不是League\Fractal\Resource\Item
我不知道如何在不更改src代码的情况下修复它。但现在,我将api路由和控制器的locale更改为en,看起来还不错。
https://stackoverflow.com/questions/43287014
复制相似问题