我正在使用Laravel 4进行我正在进行的项目。我需要从帖子中检索第一条评论。我使用以下代码来执行此操作。
$comments = Comment::where('post_id', $post->id)->first();
这成功检索了第一条评论(我知道这是因为print_r
- 编辑$comments
并且它返回了所有正确的信息。)
但是,以下代码行会触发错误__toString() must not throw an exception
<td>{{$comments->content}}</td>
当我print_r
时,它返回了类型字符串,并返回了正确的字符串。那为什么它甚至会尝试将$comments->content
转换为类型字符串,当它已经是一个字符串?
答案 0 :(得分:7)
根据您提供的信息以及我使用Laravel的经验,我打赌导致异常的代码行不您输入的行 你的问题。
<td>{{$comments->content}}</td>
此异常抱怨抛出异常的视图。如果此特定行是问题,那么您将获得有关如何将$ comments-&gt;内容转换为字符串的更具描述性的例外情况。您还已经测试过它确实是一个字符串。
我建议您查找&#34;查看&#34;对象正在回显到视图并改变它。
{{ View::make('yourbladefile')->__tostring() }}
通过提供更准确和信息丰富的例外,这对我有用。有关异常的更多信息,请查看Why it's impossible to throw exception from __toString()?
首先是什么给了我这个想法。我知道这不是一个完美的答案,所以请告诉我这是否有效,如果结果不是这样,我会更新我的答案。祝你好运。
答案 1 :(得分:0)
我知道这是一个老问题,但是对于未来的googlers(像我一样),还有另一种方法可以解决这个错误,它独立于你的框架:
public function __toString()
{
try {
return (string) $this->attributeToReturn; // If it is possible, return a string value from object.
} catch (Exception $e) {
return get_class($this).'@'.spl_object_hash($this); // If it is not possible, return a preset string to identify instance of object, e.g.
}
}
您可以将它与没有框架的自定义类一起使用,也可以与Symfony2 / Doctrine中的实体一起使用......它也可以使用。