Laravel - htmlspecialchars()は、パラメータ1が文字列であることを期待しますが、与えられたオブジェクトです。

このエラーが出ます。

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
解説 (2)

もし、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))

}
解説 (0)

serialize`を使うことができます。

<input type="hidden" name="quotation[]" value="{{serialize($quotation)}}">

しかし、この場合の最良の方法は、ブレードで json_encode メソッドを使用し、コントローラで json_decode を使用することです。

解説 (1)