Печать ответа JSON в PHP с использованием фреймворка Laravel

Я разрабатываю веб-приложение, которое собирает данные из базы данных и печатает. Я использую фреймворк Laravel. Я показал ниже использование кода. Я могу отобразить ответ JSON непосредственно в моем PHP-коде, но если я попытаюсь повторить ответ JSON, я ничего не получу.

Вот как я генерирую объект JSON, используя библиотеку Laravel Facades:

  $worklogs = Response::json($data, $this->getStatusCode(), $headers);

Вот код, который я использовал для передачи данных на страницу PHP:

  return view('index')->with('worklogs', $worklogs);

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

  {{ $worklogs }}

Но если я попытаюсь выполнить итерацию с помощью цикла foreach, возникнет ошибка, как показано ниже:

обнаружена ошибка

На странице PHP я закодировал это так, но это не работает: захваченная часть файла index.blade.php


person Lakie    schedule 30.05.2016    source источник
comment
Вам не нужно кодировать json в первую очередь.   -  person jardis    schedule 30.05.2016
comment
Почему вы используете Response::json и возвращаете view(), я правда не понимаю?   -  person devnull    schedule 30.05.2016
comment
Публикация изображений вашего кода менее полезна, чем публикация самого кода в виде текста.   -  person Scott Swezey    schedule 31.05.2016
comment
Вам не нужно использовать фасад ответа, если вы не возвращаете его пользователю/браузеру. Попробуйте вернуть view('index')-›with('worklogs', $data); вместо этого - просто передайте исходный массив $data в представление   -  person Denis Mysenko    schedule 31.05.2016


Ответы (2)


Прежде всего, как сказал Богдан Бочиоака в своем ответе, вы используете функцию Response::json только тогда, когда хотите вернуть только Json (в основном для API, чтобы другие приложения могли получить доступ к вашим данным json). Например, приведенный ниже код вернет JSON, который может быть прочитан мобильным приложением.

$worklogs = WorkLog::all();
return Response::json([
    'worklogs' => $worklogs
], $headers);

Насколько я понимаю ваш вопрос, вы хотите передать данные непосредственно в представление, поэтому ваш код в идеале должен быть следующим:

$worklogs = WorkLog::all();
return view('index',compact('worklogs'));

(Обратите внимание, что выше я решил использовать compact() вместо with->(), потому что это чище)

Затем вы можете перебирать свой код так, как хотите:

@foreach($worklogs as $worklog)
  <td>{{$worklog->id}}</td>
  <td>{{$worklog->name}}</td>
  <td>{{$worklog->company}}</td>
@endforeach
person Noble Zirwa Hara    schedule 31.05.2016
comment
я думал, что попробовал ваш способ, но я думаю, что раньше у меня было что-то не так. - person Lakie; 01.06.2016
comment
ну, я делал API, который возвращает JSON. Я делаю веб и мобильное приложение. оба используют эти API. поэтому я хотел использовать возвращенный json как для представления, так и для мобильного приложения. Итак, я хотел преобразовать json для моего представления. но это правильный/безопасный способ передачи данных непосредственно в массив базы данных. имейте в виду, что я разрешаю передавать определенные данные в модель. Одна вещь, которую я пытался, заключалась в том, чтобы поместить такие собранные данные в модель и передать модель для представления, так что это лучший способ? - person Lakie; 01.06.2016

Я не уверен, что понимаю.. прежде всего, вот как вы возвращаете json:

return Response::json([
    'hello' => $value
], $headers);

Во-вторых: что вы имеете в виду, повторяя jSon? В-третьих: в ваших сообщениях об ошибках указано, что неопределенная переменная $datas .. не $data, $data. вы отправляете параметр $data в представление?

person Bogdan Bocioaca    schedule 30.05.2016