Intereting Posts
Хорошая таблица php print_r Рамки RPC доступны? Интерполяция (двойная кавычка) ассоциативных массивов в PHP PHP с использованием CURL: есть ли способ эмулировать куки-файл вместо сохранения его в файл? как удалить url (/web/index.php) yii 2 и задать маршрут с параметром с чистым URL-адресом? Использование AND / OR в if else заявление PHP инициировать обновление SOLR после обновления MySQL Как отключить проверку html5 для определенных кнопок в symfony 2.3 PHP Script для вычисления значений форм со значениями по умолчанию, возможно, с использованием операторов if и else для submit. to page2.php Проверка наличия значений mysqli_query? PHP – остановка выполнения вызывающей функции Преобразование mysql-запроса в объект JSON с использованием php? Функция MongoDB GROUP (или Map Reduce, если необходимо) с помощью PHP-отличительных клавиш Magento: несколько транзакций по электронной почте по умолчанию в настраиваемом модуле ВЫБЕРИТЕ дату, которая больше текущей даты

Содержимое ответа должно быть строкой или объектом, реализующим __toString (), \ "boolean \".

Я пытаюсь вернуть обработанный вид с помощью Response::json но я получаю эту ошибку:

 The Response content must be a string or object implementing __toString(), \"boolean\" given." 

Это мой код:

 $posts = Post::where( ... )->orderBy( ... )->get(); $data['posts'] = View::make("posts.partials.loadHome")->with("posts", $posts)->render(); $data['msg'] = "ok"; return Response::json($data); 

Если я var_dump($data) я получаю следующее:

 <pre class='xdebug-var-dump' dir='ltr'> <b>array</b> <i>(size=2)</i> 'posts' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'&lt;div class=&quot;post postGrid&quot; data-id=&quot;1864&quot;&gt;
 &lt;a target='_blank' href=&quot;http://objavi.net/posts/1864&quot;&gt;&lt;img src=&quot;http://objavi.net/&quot; id=&quot;imgWrap&quot; data-original=&quot;/thumbs/YAo4wFzIpl76.jpg&quot; class=&quot;lazy&quot; alt=&quot;Deset manje poznatih činjenica o Jozefu Staljinu&quot;&gt;&lt;/a&gt;
 
 &lt;div id=&quot;bodyPreview&quot;&gt;
 
 &lt;a target='_blank' href=&quot;http://objavi.net/posts/1864&quot;&gt;&lt;h1 class=&quot;previewTitle&quot;&gt;Deset manje poznatih činjenica o Jozefu Staljinu&lt;/h1&gt;&lt;/a&gt;

 &lt;h3 id=&quot;postInfo&quot;&gt;
 &lt;a class=&quot;paint&quot; href=&quot;/category/17&quot;&gt;zanimljivosti&lt;/a&gt;
 '...</font> <i>(length=12172)</i> 'msg' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'ok'</font> <i>(length=2)</i> </pre> 

Это posts.partials.loadHome view:

 @foreach($posts as $post) <div class="post postGrid" data-id="{{ $post->id }}"> <a target='_blank' href="{{ URL::action('PostsController@show', $post->id) }}">{{ HTML::image(null, $post->title, ["id" => "imgWrap", "data-original" => $post->getThumb(), "class" => "lazy"]) }}</a> <div id="bodyPreview"> <a target='_blank' href="{{ URL::action('PostsController@show', $post->id) }}"><h1 class="previewTitle">{{ e($post->title) }}</h1></a> <h3 id="postInfo"> @foreach($post->categories as $c) <a class="paint" href="/category/{{ $c->id }}">{{ $c->name }}</a> @endforeach </h3> <h2 class="bodyPreview">{{ strip_tags(truncString($post->body, 160)) }}</h2> <div id="createdBy"> <a href="{{ URL::action('UsersController@show', $post->user()->first()->id) }}"> {{ HTML::image($post->user()->first()->getAvatar(), $post->user()->first()->username, ["width" => "32", "height" => "32"]) }} {{{ $post->user()->first()->username }}} </a> <label id="timeAgo">{{ localDate($post->created_at); }}</label> </div> </div> </div> @endforeach 

Я тестировал это на localhost, и все работает нормально. В чем может быть проблема?

Проверьте, нет ли каких-либо незаконных символов. У меня была эта проблема один раз и запущен utf8_encode в строке, и это решило проблему.

Я зашел в этот блог и подумал, что это дает неплохую идею для его исправления:

Такая ошибка убьет вас, если вы собираетесь отлаживать ее или трассируете ее шаг за шагом, вы никогда не найдете решение, потому что эта ошибка происходит в ответ, я имею в виду, что она будет обнаружена в рамках только после того, как ответ будет готов чтобы отображаться, Так что, как говорится в сообщении, «ответ логичен». Часто это происходит в представлении о том, что некоторые переменные влияют на контент ответа. Просто проверьте переменные вида один за другим и удалите каждую из них, попробуйте снова запустить. вы найдете переменную, вызывающую эту ошибку. Но прежде чем идти по этому пути, попробуйте изменить представление на любой другой странице просмотра (шаблон-клип) и посмотреть, не существует ли ошибка. если это не так, то проблема на странице просмотра.

Создайте следующую функцию

 function utf8_encode_deep(&$input) { if (is_string($input)) { $input = utf8_encode($input); } else if (is_array($input)) { foreach ($input as &$value) { self::utf8_encode_deep($value); } unset($value); } else if (is_object($input)) { $vars = array_keys(get_object_vars($input)); foreach ($vars as $var) { self::utf8_encode_deep($input->$var); } } } с function utf8_encode_deep(&$input) { if (is_string($input)) { $input = utf8_encode($input); } else if (is_array($input)) { foreach ($input as &$value) { self::utf8_encode_deep($value); } unset($value); } else if (is_object($input)) { $vars = array_keys(get_object_vars($input)); foreach ($vars as $var) { self::utf8_encode_deep($input->$var); } } } 

Попробуйте сделать следующее

 utf8_encode_deep($data); return Response::json($data); 

В моем случае ошибка

содержимое ответа должно быть строкой или объектом, реализующим __toString (), «boolean».

даже при исключении переменных вида один за другим или при использовании другого представления (как было предложено WillyBurb ). Так что ответ hes не работал для меня.

После долгого исследования выяснилось, что проблема была вызвана следующими столбцами:

  • created_at
  • updated_at
  • deleted_at .

После добавления их в свойство $hidden ошибка исчезла.

из документов:

Скрытие атрибутов из массива или преобразование JSON

Иногда вы можете ограничить атрибуты, включенные в массив модели или форму JSON, например пароли. Для этого добавьте определение скрытой собственности в вашу модель:

 class User extends Eloquent { //... protected $hidden = array( 'password', 'remember_token', 'deleted_at', 'created_at', 'updated_at' ); //... } 

Вы можете попробовать это, пожалуйста? im возвращает true или false (логическое значение), а не значение Response, подобное этому

 return Response::json(array( 'error' => false, 'message' => 'Valid Pincode'), 200 ); 

первый :

эта ошибка возникает только при return false;

это означает Response::json($data) == false .

второй:

некоторый символ, который json не может кодировать

возможно, некоторый символ ASCII (например, 0x00~0x31 который не может отображаться) в вашей строке …

поэтому, json encode возвращает false

Хотя этот вопрос немного стар, и ваша проблема, вероятно, решена к настоящему времени, я подумал, что это может быть актуально для других. Tl; dr: используйте DB::statement("SET NAMES 'UTF8'"); непосредственно перед извлечением результатов из базы данных.

Вероятно, ваши данные хранятся в наборе символов, отличном от UTF-8 в базе данных, например lantin1. В качестве альтернативы для кодирования результатов DB в вашем приложении вы можете подумать о том, чтобы позволить DB обрабатывать это.

При использовании MySQL вы можете указать набор символов для связи с сервером с использованием имени SET NAMES 'charset_name' . Это указывает серверу, что запросы отправляются с использованием этого набора символов, и просит сервер возвращать результаты с помощью этого набора символов. (см. документацию )

Laravel ожидает данные UTF-8. Таким образом, в этом случае вы можете выпустить заявление, предлагающее общаться в UTF-8 перед выбором результатов:

 DB::statement("SET NAMES 'UTF8'"); $posts = Post::where( ... )->orderBy( ... )->get(); 

При необходимости вы всегда можете вернуться к другому набору символов.

Чтобы вы не создали $data = array(); и локальные и удаленные версии PHP отличаются.