Я использую Laravel 4 для проекта, над которым я работаю. Мне нужно получить первый комментарий из сообщения. Для этого я использую следующий код.
$comments = Comment::where('post_id', $post->id)->first();
Это успешно возвращает первый комментарий (я знаю, потому что я print_r
-ed $comments
и возвращал всю нужную информацию).
Однако следующая строка кода запускает ошибку __toString() must not throw an exception
<td>{{$comments->content}}</td>
Когда я print_r
-ed, что он возвращает строку типа и возвращает правильную строку. Почему тогда он даже попытается преобразовать $comments->content
чтобы ввести строку, когда она уже является строкой?
Исходя из предоставленной вами информации и моего опыта работы с Laravel, я бы поставил на то, что строка кода, вызывающая исключение, не является той строкой, которую вы задали в своем вопросе.
<td>{{$comments->content}}</td>
Это исключение жалуется на представление, бросающее исключение. Если эта конкретная строка была проблемой, вы получили бы более описательное исключение о том, как $ comments-> контент не может быть преобразован в строку. Вы также уже проверили, что это действительно строка.
Я бы посоветовал найти, где ваш объект «Вид» отображается в представлении, и изменить его так.
{{ View::make('yourbladefile')->__tostring() }}
Это работало для меня, предоставляя более точное и информативное исключение. Для получения дополнительной информации об исключении вы должны проверить, почему невозможно исключить исключение из __toString ()?
Это то, что дало мне идею в первую очередь. Я знаю, что это не идеальный ответ, поэтому, пожалуйста, дайте мне знать, если это сработает, и я обновлю свой ответ, если это окажется не так. Удачи.
Я знаю, что это старый вопрос, но для будущих 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, eg } }
Вы можете использовать его со своим пользовательским классом без рамки или с сущностью в Symfony2 / Doctrine … Он также будет работать.