このエラーが出ます。
htmlspecialchars() expects parameter 1 to be string, object given
I'm used in controller:
$data = '{"pr":{"code":"1"},"ac":[[{"icon":"web","action":"link","url":"asd"}]]}'
$newData = json_decode($data);
そして、それをビューに配列として送ります: 'data' => $newData そして、$dataをビューで使おうとすると、次のようなエラーが出ます。
既に$data->ac or $data['ac']を使ってみましたが、やはり同じです...。 何かいい方法はないでしょうか?
ブレードの echo {{ $data }}
を使うと、自動的に出力がエスケープされます。エスケープできるのは文字列のみです。あなたのデータの中の $data->ac
は配列、$data
はオブジェクトですが、どちらもそのままではエコーできません。データをどのように出力すべきか、もっと具体的に説明する必要があります。具体的にどのようにするかは、あなたが何をしようとしているかによります。例えば、リンクを表示するには、{{ $data->ac[0][0]['url'] }}
とする必要があります(なぜ2つの入れ子になった配列があるのかはわかりませんが、あなたのデータ構造に従っているだけです)。
@foreach($data->ac['0'] as $link)
<a href="{{ $link['url'] }}">This is a link</a>
@endforeach
もし、htmlからコントローラに完全な配列を送りたいのであれば、これを使うことができます。
blade.phpから。
<input type="hidden" name="quotation" value="{{ json_encode($quotation,TRUE)}}">
コントローラで
public function Get(Request $req) {
$quotation = array('quotation' => json_decode($req->quotation));
//or
return view('quotation')->with('quotation',json_decode($req->quotation))
}
serialize`を使うことができます。
<input type="hidden" name="quotation[]" value="{{serialize($quotation)}}">
しかし、この場合の最良の方法は、ブレードで json_encode
メソッドを使用し、コントローラで json_decode
を使用することです。