Laravel - htmlspecialchars() ожидает, что параметр 1 будет строкой, дан объект

Я получаю эту ошибку:

htmlspecialchars() expects parameter 1 to be string, object given

I'm using in controller:

$data = '{"pr":{"code":"1"},"ac":[[{"icon":"web","action":"link","url":"asd"}]]}'
$newData = json_decode($data);

И я отправляю его в представление как массив: 'data' => $newData А когда я пытаюсь использовать $data в представлении, оно выдает ошибку

Пробовал уже использовать $data->ac ИЛИ $data['ac'], но все равно то же самое... Помогите, пожалуйста?

Решение

Когда вы используете лезвие echo {{ $data }}, оно автоматически экранирует вывод. Он может экранировать только строки. В ваших данных $data->ac - это массив, а $data - объект, ни один из которых не может быть выведен эхом как есть. Вам необходимо уточнить, как именно должны быть выведены данные. Как именно это будет выглядеть, зависит от того, что вы пытаетесь сделать. Например, чтобы вывести ссылку, вам нужно сделать {{ $data->ac[0][0][0]['url'] }} (не уверен, почему у вас два вложенных массива, но я'просто следую вашей структуре данных).

@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)