Ресурс API Laravel не работает в методе контроллера - PullRequest
0 голосов
/ 31 октября 2019

Модель моего поста имеет следующий формат:

{
   "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 ]

1 голос
/ 31 октября 2019
//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
    ];
}
0 голосов
/ 31 октября 2019

Короткий путь;

PostResource;

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