45

你在 Laravel 工作时见过这个可爱的错误吗?

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

我见过它,它非常烦人。我发现了引发此错误的两个原因。我只是想帮助人们不要花费数小时和数小时的时间。

查看下面的答案和情况。:)

4

5 回答 5

79

有一个非常简单的解决方案:不要将 View 对象转换为字符串。

不要:echo View::make('..');echo view('..');

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

对于 PHP 版本 <7.4通过强制转换视图,它会__toString()自动使用方法,不会抛出异常。如果render()手动调用,异常会正常处理。如果视图中有错误,就是这种情况 - laravel 抛出异常。

它已在 PHP >=7.4 中修复,您不应遇到此问题:https ://wiki.php.net/rfc/tostring_exceptions 。

对于 PHP 版本 <7.4:这实际上是 PHP 的限制,而不是 Laravel。在此处阅读有关此“功能”的更多信息:https ://bugs.php.net/bug.php?id=53648

于 2015-03-24T13:06:10.827 回答
6

情况 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] => jon@gmail.com
        [post_images] => Array
            (
                [0] => stdClass Object
                    (
                        [image_path] => 9452photo_2.JPG
                    )

                [1] => stdClass Object
                    (
                        [image_path] => 8031photo_3.JPG
                    )

            )

    )

当您尝试直接在视图中访问 post_images 数组时,会引发错误。不管。什么。你。做。

答案 2:检查您调用视图的所有位置。这里发生的事情是我试图在我没有提供 post_images 数组的区域的其他地方访问相同的视图。花了永远弄清楚。

我希望这对其他人有帮助。:) 我只知道我不断遇到的错误对我没有任何帮助。

于 2014-10-23T17:37:29.947 回答
0

我的问题是找出View::__toString()我的代码中确切调用的位置,以便我可以使用 using 修复它render()(正如其他答案所建议的那样)。

要找到它,请临时编辑vendor/laravel/framework/src/Illuminate/View/View.php,添加当前堆栈跟踪的日志记录:

public function __toString()
{
    // Next line added temporarily to debug.
    logger("This causes the '__toString() must not throw an exception' problem: " 
        . (new \Exception())->getTraceAsString());
    return $this->render();
}
于 2020-12-04T10:43:27.267 回答
0

当我的情况下的对象与下面的代码中$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(); 
}

一切正常,希望对您有所帮助。

于 2019-02-05T09:09:46.017 回答
-1

类似的错误是:

FooController.php 第 0 行中的 FatalErrorException:方法 App\Models\Foo::__toString() 不得抛出异常

这只是一个糟糕的任务:$foo.= new Foo;

代替:$foo = new Foo;

于 2018-02-25T13:51:40.323 回答