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

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

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

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

Посмотреть ответы & ситуации ниже. 🙂

33

Решение

Существует очень простое решение: не приводите объект 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

63

Другие решения

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

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

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

3

Я столкнулся с такой ошибкой, когда объект в моем случае $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

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

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

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

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

-1
По вопросам рекламы [email protected]