web-dev-qa-db-fra.com

Laravel: Comment analyser ces données JSON dans la lame de vue?

Actuellement c'est mon avis

{{ $leads }}

Et c'est la sortie

{"error":false,"member":[{"id":"1","firstName":"first","lastName":"last","phoneNumber":"0987654321","email":"[email protected]","owner":{
"id":"10","firstName":"first","lastName":"last"}}]}

Je voulais afficher quelque chose comme ça

Member ID: 1
Firstname: First
Lastname: Last
Phone: 0987654321

Owner ID: 10
Firstname: First 
Lastname: Last
13
David Alrdrin

C'est assez facile. Tout d’abord envoyer à la vue variable décodée (voir Laravel Views ):

view('your-view')->with('leads', json_decode($leads, true));

Ensuite, utilisez simplement les constructions de lames courantes (voir Laravel Templating) :

@foreach($leads['member'] as $member)
    Member ID: {{ $member['id'] }}
    Firstname: {{ $member['firstName'] }}
    Lastname: {{ $member['lastName'] }}
    Phone: {{ $member['phoneNumber'] }}

    Owner ID: {{ $member['owner']['id'] }}
    Firstname: {{ $member['owner']['firstName'] }} 
    Lastname: {{ $member['owner']['lastName'] }}
@endforeach
20
Maxim Lanin

Vous pouvez utiliser json decode pour obtenir un tableau php, et utiliser cette valeur comme bon vous semble

<?php 
$leads = json_decode($leads, true);
dd($leads);
4
Imtiaz Pabel

dans le contrôleur vient de convertir les données JSON en objet à l'aide de la fonction php json_decode comme ceci 

$member = json_decode($json_string); 

and pass to view in view

return view('page',compact('$member'))

en vue lame

Member ID: {{$member->member[0]->id}}
Firstname: {{$member->member[0]->firstname}}
Lastname: {{$member->member[0]->lastname}}
Phone: {{$member->member[0]->phone}}

Owner ID: {{$member->owner[0]->id}}
Firstname: {{$member->owner[0]->firstname}}
Lastname: {{$member->owner[0]->lastname}}
3
umefarooq

Pour moi, le seul problème est de prendre un objet, de le coder, puis de passer la chaîne à une balise javascript script. Pour ce faire, vous devez effectuer des remplacements. 

Commencez par remplacer chaque \ par une double barre oblique \\, puis chaque quote" par un \".

$payload = json_encode($payload);
$payload = preg_replace("_\\\_", "\\\\\\", $payload);
$payload = preg_replace("/\"/", "\\\"", $payload);
return View::make('pages.javascript')
  ->with('payload', $payload)

Puis dans le gabarit de la lame

@if(isset($payload))
<script>
  window.__payload = JSON.parse("{!!$payload!!}");
</script>
@endif

Cela vous permet essentiellement de prendre un objet du côté php, puis d'avoir un objet du côté javascript.

3
Funkodebat

il semble que vous puissiez utiliser @json ($ leads) depuis Laravel 5.5

https://laravel.com/docs/5.5/blade

2
mygeea

Pour un tel cas, vous pouvez faire comme ça 

@foreach (json_decode($leads->member) as $member)
     {{ $genre }}
@endforeach
2
Bijaya Kumar Oli

Il suffit de supprimer $ dans la méthode compacte,
retourne la vue ('page', compact ('membre'))

1
Ahmed Mansour

Si vos données proviennent d'un modèle, vous pouvez faire: 

App\Http\Controller\SomeController

public function index(MyModel $model)
{
    return view('index', [
        'data' => $model->all()->toJson(),
    ]);
}

index.blade.php

@Push('footer-scripts')
  <script>
    (function(global){
      var data = {!! $data !!};
      console.log(data);
      // [{..}]
    })(window);
  </script>
@endpush
0
Gus