LaravelアプリをMySQLからpSQLに移動するとすぐに。このエラーが引き続き発生します。
応答の内容は、__ toString()、 "boolean"を実装する文字列またはオブジェクトでなければなりません。
プロモーションを返すためのAPIを持っています
http:// localhost:8888/api/promotion/1
public function id($id){
$promotion = Promotion::find($id);
dd($promotion); //I got something here
return $promotion;
}
以前はプロモーションを返していましたが、現在はエラーを返します。
dd($ 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
}
__これに関するヒントや提案は大いに役立ちます!
response()->json($promotion)
を返すだけでは、この質問の問題は解決しません。 $promotion
はEloquentオブジェクトであり、Laravelは応答に対して自動的にjson_encodeします。 PHPストリームリソースであり、エンコードできないimg
プロパティのため、jsonエンコードは失敗しています。
コントローラーから返されるものは何でも、Laravelは文字列への変換を試みます。オブジェクトを返すと、オブジェクトの__toString()
マジックメソッドが呼び出されて変換が行われます。
したがって、コントローラーアクションからreturn $promotion
だけを実行すると、Laravelが__toString()
を呼び出して、表示する文字列に変換します。
Model
で、__toString()
はjson_encode
の結果を返すtoJson()
を呼び出します。したがって、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)のような「無効な文字」があったことです。