Подтвердить что ты не робот

Ошибка Laravel: метод Illuminate\View\View:: __ toString() не должен генерировать исключение

Вы видели эту прекрасную ошибку во время работы в Laravel?

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

Я видел это, и это невероятно раздражало. Я обнаружил две причины, по которым эта ошибка возникает. Я просто хочу помочь людям не принимать часы и часы.

Просмотрите ответы и ситуации ниже.:)

4b9b3361

Ответ 1

Ситуация 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 непосредственно в представлении, он выдает ошибку. Нет. Дело. Какие. Вы. Сделайте.

Ответ 2: Проверьте все места, где вы вызываете представление. Здесь произошло то, что я пытался получить доступ к той же точке зрения где-то еще в области, где я не предоставлял массив post_images. Взял FOREVER, чтобы понять.

Надеюсь, это поможет кому-то другому.:) Я просто знаю, что ошибка, которую я продолжал получать, никуда не помогала.

Ответ 2

Существует очень простое решение: не бросать объект View в строку.

Не выполнять: echo View::make('..'); или echo view('..');

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

В режиме кастинга он автоматически использует метод __toString(), который не может генерировать исключение. Если вы вызываете render() вручную, исключения обрабатываются нормально. Это имеет место, если в представлении есть ошибка - laravel выдает исключение.

На самом деле это ограничение PHP, а не Laravels. Подробнее об этой "функции" читайте здесь: https://bugs.php.net/bug.php?id=53648

Ответ 3

Я столкнулся с такой ошибкой, когда объект в моем случае $expression = new Expression(); совпадает с переменной параметра submitExpression($intent, $bot_id, **$expression**){ проверьте код ниже для получения более подробной информации.

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

}

поэтому я изменил приведенный выше код на что-то вроде

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

и все работало нормально, надеюсь, вы найдете это полезным.

Ответ 4

похожая ошибка:

FatalErrorException в строке FooController.php 0: метод App\Models\Foo :: __ toString() не должен вызывать исключение

и это было просто плохое задание: $foo.= new Foo;

вместо: $foo = new Foo;