Как отобразить данные JSON в виде лезвия laravel - PullRequest
0 голосов
/ 20 июня 2020

Я получаю JSON ответ

@foreach($logs as $log)
  <div class="modal-body">
    {{ $log->general }}
  </div>

  <div class="modal-body">
    {{ $log->response_headers }}
  </div>
@endforeach

ответ не структурирован так, как я сделал, теперь доступен для чтения

General
{
  "host": "abcd-io.test",
  "path": "api/v1/companies/hello.com",
  "request_ip": "127.0.0.1"
}

response_headers
{
  "X-Powered-By": [
    "Express"
  ],
  "Access-Control-Allow-Origin": [
    "*"
  ],
  "Content-Type": [
    "application/json; charset=utf-8"
  ],
  "Content-Length": [
    "4857"
  ],
  "ETag": [
    "W/\"12f9-UhKH0rSAm7BiHIeW5pbrH1gphXs\""
  ],
  "Date": [
    "Sat, 20 Jun 2020 12:51:28 GMT"
  ],
  "Connection": [
    "keep-alive"
  ]
}

Контроллер

public function index() {
   $logs = Log::where('user_id',auth()->user()->id)
          ->orderBy('created_at', 'DESC')->get();

   return view('api.logs', compact('logs'));
}

то, что у меня sh, - это отображать host и abcd-io.test отдельно

Я пробовал использовать {{ $log->general['host'] }}, но это не сработало

Ответы [ 2 ]

0 голосов
/ 24 июня 2020

Решение состоит в том, чтобы выполнить приведение столбца в модели.

protected $casts = [
    'general' => 'array'
];

и, следовательно, в представлении я могу показать его как

@foreach($logs as $log)
  <div class="modal-body">
    {{ $log->general['host'] ?? 'No host' }}
  </div>
@endforeach

Документация: https://laravel.com/docs/7.x/eloquent-mutators#attribute -кастинг

0 голосов
/ 20 июня 2020

Предполагая, что «общий» - это строка, вам может потребоваться использовать json_decode ($ json) для преобразования строки JSON в массив и сделать что-то вроде этого:

//Convert JSON to array
$json = json_decode($log->general, true);

Получить хост

$json['host']
...