Laravel API资源在控制器方法中不起作用

时间:2019-10-31 08:53:57

标签: php laravel jsonapi-resources

我的帖子模型具有以下格式:

{
   "id": 1,
   "title": "Post Title",
   "type: "sample"
}

这是我的控制器方法:

public function show($id) {

      $post = App\Post::find($id);
      $transformedPost = new PostResource($post);

      return $transformedPost;
}

这是我的PostResource的外观:

public function toArray($request)
{

    return [
        'id' => $this->id,
        'name' => $this->title,
        'type' => $this->convertType($this->type),
    ];
}

public function convertType($type)
{
    return ucfirst($type);
}

所以在show / 1响应中,我应该得到:

{
   "id": 1,
   "name": "Post Title",
   "type: "Sample"
}

相反,我得到了:

{
   "id": 1,
   "title": "Post Title",
   "type: "sample"
}

因此,我的PostResource显然无法按预期工作。键“ title”没有被键“ name”代替。


我在这里想念什么?我知道这篇文章可能会重复,但其他问题的解决方案似乎对我不起作用。

我正在使用Laravel 6.x。

2 个答案:

答案 0 :(得分:1)

//I'm trusting you want to use an Accessor.

//In your Post Model, try something like this

public function getTypeAttribute($value)
    {
      return ucfirst($value);
    }

您的PostResource现在应该是

public function toArray($request)
{

    return [
        'id' => $this->id,
        'name' => $this->title,
        'type' => $this->type
    ];
}

答案 1 :(得分:0)

短路;

PostResource;

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->title,
        'type' => ucfirst($this->type)
    ];
}