Ресурс Laravel API не приходит в формате json при использовании в контроллере - PullRequest
0 голосов
/ 18 апреля 2020

Я создал ресурс API, например http://app.localhost/api/product/info/1000

И он работает нормально и возвращает нужные данные json формат.

Но, когда я пытаюсь чтобы выполнить ресурс в контроллере, например,

$Product = Product::where('sku', $this->sku)->get()->first();
$productInfo = new ProductRes($Product);

Он возвращает полный объект $Product вместо данных json. Я разместил скриншот полученного объекта. enter image description here

Можно ли отобразить ресурс так же, как в URL?

Спасибо

Ответы [ 3 ]

1 голос
/ 18 апреля 2020

Если вы dump или dd ваша переменная $productInfo, это нормально, она не показывает вам свою отрендеренную версию. Если вы действительно хотите сбросить рендер, вы можете сделать это

$Product = Product::where('sku', $this->sku)->get()->first();
$productInfo = new ProductRes($Product);
dump($productInfo->resolve());
1 голос
/ 18 апреля 2020

Ваш продукт всегда является объектом, но laravel использует метод __ toString magi c, который в основном означает, что то, что я должен делать, когда пользователь хочет повторить объект, это именно то, что вы пытаюсь сделать.

Вы пытаетесь echo $product, который вызывает __toString маги c метод и laravel преобразует его в json для вас

  /**
     * Convert the collection to its string representation.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->toJson();
    }

Но когда вы dd($product) вы не отображаете $ product, что означает, что в этом случае вы видите полный объект, выводимый на экран.

1 голос
/ 18 апреля 2020

Laravel преобразует ответы в JSON, если вы сбросите объект в контроллере, он покажет, что это на самом деле ... объект.

Если вы не сбросите переменную, а вместо этого сделаете return $productInfo, она должна привести к JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...