Laravelでの作業中にこの素敵なエラーを見たことがありますか?
Method Illuminate\View\View::__toString() must not throw an exception
私はそれを見ました、そしてそれは信じられないほど迷惑です。このエラーがスローされる理由は2つあります。私は人々が何時間も何時間もかけないようにしたいだけです。
以下の回答と状況をご覧ください。 :)
状況1:配列の値を印刷しようとしています。
回答1:アレイを印刷してみてください。配列だと確信していますか?配列ではなくオブジェクトだったときに、このエラーが発生しました。 print_rを実行して、得られるものを確認してください。
状況2:このように関連付けられた配列があります:
Array
(
[post_id] => 65
[post_text] => Multiple Images!
[created_at] => 2014-10-23 09:16:46
[updated_on] =>
[post_category] => stdClass Object
(
[category_label] => Help Wanted
[category_code] => help_wanted
)
[employee_full_name] => Sam Jones
[employee_pic] => /images/employee-image-placeholder.png
[employee_email] => [email protected]
[post_images] => Array
(
[0] => stdClass Object
(
[image_path] => 9452photo_2.JPG
)
[1] => stdClass Object
(
[image_path] => 8031photo_3.JPG
)
)
)
ビュー内でpost_images配列に直接アクセスしようとすると、エラーがスローされます。 No。Matter。What。You。Do。
回答2:ビューを呼び出しているすべての場所をチェックインします。ここで起こったことは、post_images配列を与えていなかったエリアのどこかで同じビューにアクセスしようとしたことです。把握するために永遠にかかった。
これが他の人の助けになることを願っています。 :)取得し続けたエラーがどこにも役に立たなかったことを知っています。
非常に簡単な解決策があります。Viewオブジェクトを文字列にキャストしないでください。
しない:echo View::make('..');
またはecho view('..');
実行:echo View::make('..')->render();
またはecho view('..')->render();
ビューをキャストすることで、__toString()
メソッドを自動的に使用し、例外をスローできません。 render()
を手動で呼び出すと、例外は通常どおり処理されます。これは、ビューにエラーがある場合に該当します-laravelは例外をスローします。
これは、実際にはPHP制限であり、Laravelsではありません。この「機能」の詳細については、こちらを参照してください。 https://bugs.php.net/bug.php?id=53648
私の場合のオブジェクト$expression = new Expression();
がパラメーター変数submitExpression($intent, $bot_id, **$expression**){
と同じ場合、このようなエラーが発生しました。詳細については、以下のコードを確認してください。
private function submitExpression($b_id, $expression){
$expression = new Expression();
$expression->b_id = $b_id;
$expression->expression = $expression;
$expression->save();
}
だから私は上記のコードを次のようなものに変更しました
private function submitExpression($b_id, $statement){
$expression = new Expression();
$expression->b_id = $b_id;
$expression->expression = $statement;
$expression->save();
}
すべてが正常に機能していたので、これが役立つことを願っています。