web-dev-qa-db-fra.com

Erreur Laravel: méthode Illuminate\View\View :: __ toString () ne doit pas lever une exception

Avez-vous vu cette belle erreur en travaillant à Laravel? 

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

Je l'ai vu et c'est incroyablement ennuyant. J'ai découvert deux raisons pour lesquelles cette erreur est levée. Je veux juste aider les gens à ne pas prendre des heures et des heures de temps. 

Voir les réponses et les situations ci-dessous. :)

32
cbloss793

Situation 1: Essayer d’imprimer une valeur dans un tableau. 

Réponse 1: Essayez d’imprimer le tableau. Êtes-vous sûr que c'est un tableau? J'ai eu cette erreur quand c'était un objet au lieu d'un tableau. Essayez de faire un print_r et voir ce que vous obtenez. 

Situation 2: Vous avez ce tableau associé comme ceci: 

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
                    )

            )

    )

Lorsque vous essayez d'accéder au tableau post_images directement dans une vue, une erreur est renvoyée. Peu importe. Quoi. Vous. Faire.  

Réponse 2: Enregistrez tous les endroits où vous appelez la vue. Ce qui s’est passé ici, c’est que j’essayais d’accéder au même point de vue ailleurs dans une zone où je ne donnais pas le tableau post_images. Pris à jamais pour comprendre. 

J'espère que ça aidera quelqu'un d'autre. :) Je sais juste que l'erreur que j'ai continué à obtenir ne m'a pas aidé nulle part. 

3
cbloss793

Il existe une solution très simple: ne convertissez pas l'objet View en chaîne.

Ne pas: echo View::make('..'); ou echo view('..');

Do: echo View::make('..')->render(); ou echo view('..')->render();

En convertissant la vue, il utilise automatiquement la méthode __toString(), qui ne peut pas lever une exception. Si vous appelez manuellement render(), les exceptions sont gérées normalement. C'est le cas s'il y a une erreur dans la vue - Laravel lève une exception.

Il s'agit en réalité d'une limitation PHP, pas de Laravels. En savoir plus sur cette "fonctionnalité" ici: https://bugs.php.net/bug.php?id=53648

63
Mārtiņš Briedis

J'ai rencontré une erreur comme celle-ci lorsqu'un objet dans mon cas $expression = new Expression(); est identique à la variable de paramètre submitExpression($intent, $bot_id, **$expression**){, sous le code ci-dessous, pour plus de détails.

private function submitExpression($b_id, $expression){
   $expression = new Expression();
   $expression->b_id = $b_id;
   $expression->expression = $expression;
   $expression->save();

}

donc j'ai changé le code ci-dessus en quelque chose comme

private function submitExpression($b_id, $statement){      
   $expression = new Expression();
   $expression->b_id = $b_id;
   $expression->expression = $statement;
   $expression->save(); 
}

et tout fonctionnait bien, j'espère que vous trouverez cela utile.

0
Solar