Как только я переведу свое приложение Laravel из MySQL в pSQL. Я продолжал получать эту ошибку.
Содержимое ответа должно быть строкой или объектом, реализующим __toString (), «boolean».
У меня есть API, который предполагает вернуть мою рекламу
HTTP: // локальный: 8888 / API / продвижение / 1
public function id($id){ $promotion = Promotion::find($id); dd($promotion); //I got something here return $promotion; }
Он использовал для возврата моего продвижения, теперь он возвращает ошибку.
дд ($ продвижение);
I got Promotion {#410 ▼ #table: "promotions" #connection: null #primaryKey: "id" #perPage: 15 +incrementing: true +timestamps: true #attributes: array:16 [▼ "id" => 1 "cpe_mac" => "000D6721A5EE" "name" => "qwrqwer" "type" => "img_path" "status" => "Active" "heading_text" => "qwerq" "body_text" => "werqwerqw" "img" => stream resource @244 ▶} "img_path" => "/images/promotion/1/promotion.png" "video_url" => "" "video_path" => "" "account_id" => 1001 "img_url" => "" "footer_text" => "qwerqwerre" "created_at" => "2016-08-04 10:53:57" "updated_at" => "2016-08-04 10:53:59" ] #original: array:16 [▶] #relations: [] #hidden: [] #visible: [] #appends: [] #fillable: [] #guarded: array:1 [▶] #dates: [] #dateFormat: null #casts: [] #touches: [] #observables: [] #with: [] #morphClass: null +exists: true +wasRecentlyCreated: false }
__ Любые подсказки / предложения по этому поводу будут огромной помощью!
Когда вы просто return $promotion
из своего действия с контроллером, Laravel собирается называть __toString()
на нем, чтобы преобразовать его в строку для отображения.
На Model
__toString()
вызывает toJson()
, которая возвращает результат json_encode
. Поэтому json_encode
возвращает false
, то есть он запускается в ошибку.
Ваш dd
показывает, что ваш атрибут img
является stream resource
. json_encode
не может кодировать resource
, поэтому это, вероятно, вызывает сбой. Вы должны добавить свой атрибут img
в свойство $hidden
чтобы удалить его из json_encode
.
class Promotion extends Model { protected $hidden = ['img']; // rest of class }
Ваш ответ должен вернуть какой-то объект Response
. Вы не можете просто вернуть объект.
Поэтому измените его на что-то вроде:
return Response::json($promotion);
или мой любимый, используя вспомогательную функцию:
return response()->json($promotion);
Если возврат ответа не работает, это может быть какая-то проблема с кодировкой. См. Эту статью: Содержимое ответа должно быть строкой или объектом, реализующим заданные __toString (), \ "boolean \". "
Я получил эту проблему, когда я использовал вызов ajax для извлечения данных из базы данных. Когда контроллер вернул массив, он преобразовал его в логическое. Проблема заключалась в том, что у меня были «недопустимые символы», такие как ú (u с акцентом).