Dès que je déplace mon Laravel App de MySQL vers pSQL. Je continue à avoir cette erreur.
Le contenu de la réponse doit être une chaîne ou un objet implémentant __toString (), "boolean".
J'ai une API qui suppose de retourner ma promotion
http: // localhost: 8888/api/promotion/1
public function id($id){
$promotion = Promotion::find($id);
dd($promotion); //I got something here
return $promotion;
}
Il retournait ma promotion, maintenant, il retourne une erreur.
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
}
__ Toute astuce/suggestion à ce sujet sera d'une grande aide!
Le simple retour de response()->json($promotion)
ne résoudra pas le problème de cette question. $promotion
Est un objet Eloquent qui Laravel json_encode automatiquement pour la réponse. Le codage JSON échoue à cause de la propriété img
, qui est une ressource de flux PHP, et ne peut pas être codée.
Quoi que vous retourniez de votre contrôleur, Laravel tentera de se convertir en chaîne. Lorsque vous retournez un objet, la méthode magique __toString()
est invoquée pour effectuer la conversion.
Par conséquent, lorsque vous venez de return $promotion
À partir de votre action de contrôleur, Laravel va appeler __toString()
pour le convertir en chaîne à afficher.
Sur le Model
, __toString()
appelle toJson()
, qui renvoie le résultat de json_encode
. Par conséquent, json_encode
Renvoie false
, ce qui signifie qu’il rencontre une erreur.
Votre dd
indique que votre attribut img
est un stream resource
. json_encode
Ne peut pas coder un resource
, c'est donc probablement à l'origine de l'échec. Vous devez ajouter votre attribut img
à la propriété $hidden
Pour le supprimer de json_encode
.
class Promotion extends Model
{
protected $hidden = ['img'];
// rest of class
}
Votre réponse doit renvoyer une sorte d'objet Response
. Vous ne pouvez pas simplement retourner un objet.
Alors changez-le en quelque chose comme:
return Response::json($promotion);
ou mon préféré en utilisant la fonction d'assistance:
return response()->json($promotion);
Si le retour d'une réponse ne fonctionne pas, il peut s'agir d'un problème d'encodage. Voir cet article: Le contenu de la réponse doit être une chaîne ou un objet implémentant __toString (),\"boolean \" étant donné. "
J'ai eu ce problème lorsque j'ai utilisé un appel ajax pour récupérer des données de la base de données. Lorsque le contrôleur a renvoyé le tableau, il l'a converti en booléen. Le problème était que j'avais des "caractères non valides" comme ú (u avec accent).