Intereting Posts
Xdebug успешно подключается к клиентам DBGP, но не останавливается на контрольных точках laravel Hash :: заставить продолжать давать разные результаты Отправка данных между php и dart завивать и изменять размер удаленного изображения Безопасное хранение учетных данных пользователя в БД, для веб-приложения PHP Doctrine2: Невозможно выбрать сущность через идентификационные переменные, не выбирая хотя бы один псевдоним корня сущности Как передать дополнительную переменную в symfony form builForm Function Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, boolean указан в /home/folder/public_html/folder/folder/login.php в строке 18 Как проверить любое значение массива в другом массиве php? Временная переменная Важная опция выбора Электронная почта с PHP нарушила кодировку заголовка субъекта Laravel 5.2 Регистрация событий файл statize не выполнен Как отправить содержимое внешнего файла на принтер?

__toString () не должен генерировать ошибку исключения при использовании строки

Я использую 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 … Он также будет работать.