web-dev-qa-db-ja.com

Laravel Error:メソッドIlluminate \ View \ View :: __ toString()は例外をスローしてはいけません

Laravelでの作業中にこの素敵なエラーを見たことがありますか?

Method Illuminate\View\View::__toString() must not throw an exception

私はそれを見ました、そしてそれは信じられないほど迷惑です。このエラーがスローされる理由は2つあります。私は人々が何時間も何時間もかけないようにしたいだけです。

以下の回答と状況をご覧ください。 :)

36
cbloss793

状況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配列を与えていなかったエリアのどこかで同じビューにアクセスしようとしたことです。把握するために永遠にかかった。

これが他の人の助けになることを願っています。 :)取得し続けたエラーがどこにも役に立たなかったことを知っています。

4
cbloss793

非常に簡単な解決策があります。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

65

私の場合のオブジェクト$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(); 
}

すべてが正常に機能していたので、これが役立つことを願っています。

0
Solar