Laravel错误:方法Illuminate \ View \ View :: __ toString()不得抛出异常

时间:2015-02-04 19:01:35

标签: php laravel

我正在使用larval 4.2,我在我的wrapper.php视图文件中收到以下错误:

   <?php echo View::make('layouts/blocks/header')->with('sidebar', $sidebar)->with('active', $active); ?>
   <?php echo $content; ?>
   <?php echo View::make('layouts/blocks/footer'); ?>

错误:

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

你知道这导致了什么吗?

1 个答案:

答案 0 :(得分:5)

Laravel通过将Illuminate\View\View对象转换为字符串来呈现其视图。如果一个对象被转换为一个字符串并且设置了__toString方法,那么PHP将调用__toString方法并使用该值作为转换值。

例如,这个程序

class Foo
{
    public function __toString()
    {
        return 'I am a foo object';
    }
}
$o = new Foo;
echo (string) $o;

将输出

I am a foo object.

这种行为有一个很大的警告 - 由于PHP implmentation细节,你不能在__toString中抛出异常。

所以,看起来您遇到的问题是您的视图确实会引发异常。根据您提供的信息,错误可能是任何事情。我进一步调试的方法是尝试在视图中运行PHP代码

echo View::make('layouts/blocks/header')->with('sidebar', $sidebar)->with('active', $active);
echo $content;
echo View::make('layouts/blocks/footer');

在视图之外(路径,控制器操作等),确保$sidebar$content等具有相同的值。这应该仍然会抛出异常,但因为它超出了__toString PHP,它将为您提供有关为什么引发异常的更多信息。通过真实的错误消息,您将能够解决实际问题。