【问题标题】:Laravel Error : Method Illuminate\View\View::__toString() must not throw an exceptionLaravel 错误:方法 Illuminate\View\View::__toString() 不得抛出异常
【发布时间】:2015-04-04 10:37:38
【问题描述】:

我正在使用 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

你知道这是什么原因吗?

【问题讨论】:

  • 您的某个视图有错误。
  • wrapper.php 是一个视图文件,但你的意思是哪个像标题?
  • 它在layouts/blocks/headerlayouts/blocks/footer 中。注释掉一个或另一个以查明哪个视图存在问题,然后在此处发布视图的内容以便人们提供帮助。
  • 是的,我知道我遇到了一个问题,我有一个使用 Laravel 3.2 的旧脚本,我正试图将它移到 Laravel 4.2,这是一场噩梦,他们使用 Asset::styles();在头文件中我想我需要用 laravekl 4.2 等效替换它不知道如何?

标签: php laravel


【解决方案1】:

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 实现细节,您不能在 __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 会为您提供更多关于为什么它引发异常的信息。通过真正的错误消息,您将能够解决实际问题。

【讨论】:

  • 我把它放在我的 routes.php 中仍然是同样的错误,没有额外的错误细节我无法弄清楚实际问题是什么
  • @user3150060 这意味着错误发生在您的一个子视图中。注释掉 View::make 行,看看它是一行还是两行。然后打开layouts/blocks/headerlayouts/blocks/footer 的模板——在其中查找PHP 代码并重复,直到找到问题为止。
  • 我注意到添加 ->render();显示更多错误,我发现出了什么问题
  • @user3150060 我不是 100% 确定,但我敢打赌 View 的 __toString 方法定义看起来像 $this-&gt;render(...) 通过显式渲染视图,您跳过了 __toString 步骤并让 PHP 告诉你是什​​么错误。好主意!
猜你喜欢
  • 2014-12-19
  • 2014-04-20
  • 2016-09-23
  • 2016-07-13
  • 2014-11-18
  • 2021-08-03
  • 2014-05-15
  • 2015-04-14
  • 2019-05-12
相关资源
最近更新 更多