web-dev-qa-db-ja.com

スクリプトファイルでLaravel Bladeを使用するには?

これを使用して店舗検索アプリを作成しようとしています tutorial およびLaravel 5.これらの質問の人々 Here および Here は、実行するために@foreachループおよび他のブレードテンプレート言語を使用しているようです緯度/経度座標を使用します。

私のマップコードがjsファイルにあるときに、ブレードを使用して座標をループする方法は基本的にわかりません。そんなことがあるものか?私は何か間違ったことをしていますか?

次のコードを持つjsファイル(maps.js)でマップを表示しています。

function initialize() {

var map_canvas = document.getElementById('map');

// Initialise the map
var map_options = {
    center: location,
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(map_canvas, map_options)

// Put all locations into array
var locations = [
@foreach ($articles as $article)
    [ {{ $article->lat }}, {{ $article->lng }} ]     
@endforeach
];

for (i = 0; i < locations.length; i++) {
    var location = new google.maps.LatLng(locations[i][0], locations[i][1]);

    var marker = new google.maps.Marker({
        position: location,
        map: map,
    }); 
}

// marker.setMap(map); // Probably not necessary since you set the map above

}

しかし、明らかにそれは@foreach行にとどまります。

PS:誰かがLaravel 5でこのチュートリアルをフォローしているなら、このパートに関する情報に感謝します:PHPでXMLを出力します。

14
thomas jaunism

外部Javascriptファイル内でBladeテンプレートを使用する方法はありません。

Laravelはビュー/テンプレートにのみデータを渡すことができます。 Javascriptファイルは外部から読み込まれるため、アプリデータは渡されません。

これを回避するには、Bladeテンプレートファイル内に<script>タグを作成する必要があります。

{{-- Code in your template file, e.g., view.blade.php --}}

<script type="text/javascript">

// Put all locations into array
var locations = [
@foreach ($articles as $article)
    [ "{{ $article->lat }}", "{{ $article->lng }}" ], 
@endforeach
];

// NOTE: I've added a comma which will be needed to delimit each array within the array.
//       Quotes will also be needed since lat and long are not integers.

</script>

このスニペットがmaps.jsファイルを含めるためのコードbeforeになるようにしてください。 maps.jsタグ内に<head>ファイルを含めた場合、そのインクルードスニペットをページの一番下に移動する必要があります。

ただし、これはかなり初歩的なソリューションです。より良い方法は、AJAX=を使用して、初期化時にmaps.jsファイル内からデータを取得することです。

もちろん、これには、要求を処理して必要なデータを返すことができる新しいControllerメソッドと対応するルートを作成する必要があります。

27
heisian

JavaScriptオブジェクトからEloquentオブジェクトを作成できます。たとえば、次のコードを見てください。

// index.blade.php
<script>var userObj = {{ $authUser or 'undefined' }}</script>

これはbladeビューであり、viewをロードして、このようなものを使用してcollectionをビューに渡しているだけです( view composer を使用して=):

View::composer('layouts.master', function($view) {
    $user = null;
    if(Auth::check()) {
        $user = Auth::user();
    }
    $view->with('authUser', $user);
});

だから、私のview$authUserので、次のように簡単にJSオブジェクトに変換できます。

<script>var userObj = {{ $authUser or 'undefined' }}</script>

これで、JS変数(JavaScript)にあるuserObjオブジェクトとして使用できるようになりました。 私のこの記事 ほぼ1年前にLaravel-4

2
The Alpha

提供されたサンプルでは、​​ブレードファイル内にあり、すべてのJavaScriptがタグの間にあるため、ブレードを使用しています。 .jsファイルタイプではないため、この方法でブレード言語機能を使用できます。

1
James