Использование Laravel 5.6 Blade для отправки массива PHP в виде строки JSON или объекта JSON в интерфейс JS - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь определить наилучший подход для отправки массива PHP в виде строки JSON или объекта JSON для внешнего интерфейса JavaScript с помощью шаблона лезвия Laravel 5.6.

Похоже, когда ясделайте следующее в файле шаблона Blade, он никогда не преобразует его в строку.

 @php $vueModel = [ ...] @endPhp

  <script>
      sessionStorage.setItem('vueModel', {!! json_encode($vueModel) !!} );
      ...
  </script>

Показывается как [Object Object] в инструментах разработчика Chrome.

Так что после этого, если я попытаюсь сделать следующее, это не будет работать (будут ошибки):

 let model = JSON.parse(sessionStorage.getItem('vueModel'));

Но если я сделаю следующий трюк, то он выплюнет строку.

Обратите внимание на одиночную кавычку, заключенную в '{!!... !!} '

<script>
  sessionStorage.setItem('vueModel', '{!! json_encode($vueModel) !!}' );
  ...

Однако у этого есть своя собственная проблема, потому что теперь я получаю строку с кавычками, закодированными обратной косой чертой, а затем мне придется это исправить.

Итак, как правильно отправить массив PHP в виде объекта JSON или строки JSON без какой-либо кодировки в Frontend JavaScript с использованием языка шаблонов Blade laravel 5.6?Каков рекомендуемый подход в этой ситуации?

1 Ответ

0 голосов
/ 01 июня 2018

Найден способ, который, как представляется, рекомендуется для Laravel 5.6 Blade engine:

sessionStorage.setItem('vueModel', JSON.stringify(@json($vueModel)));

Использование директивы @ json blade - хороший и удобный способ преобразованияPHP Array to JSON Object для внешнего интерфейса.

Затем, чтобы избежать проблем с кодировкой ... на внешнем интерфейсе вы делаете следующее:

let vModel = JSON.parse(... ваше строковое представление JSON массива PHP)!

Таким образом, вы получаете чистый объект JSON на внешнем интерфейсе JS, не беспокоясь о проблеме кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...