Laravel配列を渡して保存したい。->all()
を使用したので、オブジェクトではなく、次のような結果が得られます。
array:83 [▼
0 => 1
1 => 11
2 => 12
...
]
{{ $theArray }}
を使用してビューでこれにアクセスできます。
しかし、何を試しても、これをJavaScript配列にすることはできませんでした。
私は試した
var array = {{ $theArray }};
var array = {{{ $theArray }}};
私は近くにいるように感じますが、それを理解することができませんでした
var app = @json($array);
魅力のように働く
json_encode()
を使用できます
_var array = {{ json_encode($theArray) }};
_
またはJSON.parse()
を使用してjson文字列を解析します
_var array = JSON.parse('{{ json_encode($theArray) }}');
_
引用符で囲んでいるか、json_encode()を使用している
_var array = "{{ $theArray }}";
^ ^
_
または、array()
の値の場合
_var array = "{{ json_encode($theArray) }}";
^ ^
_
Javascript変数を引用符で囲まないと、エラーが発生します。コンソールで確認できます。
これは私にとってはうまくいきます:)
var array = {!! json_encode($theArray) !!};
これは私のために働いた。
let array = JSON.parse('{!! json_encode($array) !!}');
単に、ブレード構文を使用して特殊文字をエスケープします。これを試して。
var array = {!! $theArray !!};
最良の部分は、JavaScriptでオブジェクトフォームに解析する必要がないことです。
JavaScript変数を初期化するために、配列をJSONとしてレンダリングする目的でビューに配列を渡す場合があります。例えば:
<script>
var app = <?php echo json_encode($array); ?>;
</script>
ただし、json_encode
を手動で呼び出す代わりに、@json
Bladeディレクティブを使用できます。 @json
ディレクティブは、PHPのjson_encode
関数と同じ引数を受け入れます。
<script>
var app = @json($array);
var app = @json($array, JSON_PRETTY_PRINT);
</script>
@json
ディレクティブは、Vueコンポーネントまたはdata- *属性をシードする場合にも役立ちます。
<example-component :some-prop='@json($array)'></example-component>
https://laravel.com/docs/5.8/blade#blade-and-javascript-frameworks
時々、all()
は Laravelコレクション を配列に変換するには不十分です。カスタムタイプオブジェクトのコレクションをLaravelビューを介してJSに渡そうとしたときに、この問題が発生しました。
フロントエンドJSで配列を取得するには、 Collection::values()
メソッドの前に all()
メソッドを適用する必要があります。
そう:
_
// In your HTTP controller
$collection = collect([myObj1,myObj2]); // The collection filled with custom type objects.
$myArray = $collection->values()->all(); // Then converted to an array. Just `all()` is not enough;
return view('myview', $myArray);
_
_{{-- In your myview.blade.php --}}
<script>window.myArray= @json($myArray)</script>
_
次に、JS _window.myArray
_では、オブジェクト_[]
_ではなく配列_{}
_を取得します。
詳細
これはおそらく、配列のインデックスが昇順でない場合に発生しますPHPは、インデックスをオブジェクトキーと見なし、次に配列をオブジェクトと見なします。したがって、配列ではなくオブジェクトへの変換。 Laravelコレクションvalues()
は、配列キーをリセットします。私はそれが内部でPHP array_values()
を適用していると思います。