web-dev-qa-db-ja.com

Laravel javascriptファイル内の4ブレード構文

私のホームページには、いくつかのブレード構文と混同されたインラインJavaScriptがありました。

    <script type="text/javascript">
        @if(Auth::user())
            if(path.indexOf('/user/' + {{Auth::user()->id}} ) != -1) {
                    $( "#tabs" ).tabs();
            };
        @endif
    </script>

Javascriptを外部のfile.jsに移動するまでは機能しました。ブレード構文が追加されるたびにエラーが発生しました。 javascript files.jsでブレード構文を融合する方法はありますか?運が悪かったので、file.blade.jsに名前を変更してみました...

11
Mwirabua Tim

これを試すと、JavaScriptファイルを_app/views_フォルダーに保存し、名前を_xxx.blade.php_に変更できます。そうです_.blade.php_ ブレードエンジンは_.blade.php_そして@include('your javascript filename')を使用してjavascriptファイルをインクルードしますBladeで解析、それは機能します。

10

受け入れられたソリューションは機能しますが、これは間違いなくアンチパターンです。

これがそれを書いた人ではないのを見たら、私は何が起こっているのか非常に混乱するでしょう。

私の提案はあなたのPHPファイルにあり、外部ファイルに必要なすべての値を取得するブロックを持ってから、外部ファイルを呼び出します。

したがって、PHPファイルには、次のようなものがあります。

<script>
    var userID = "{{ Auth::user()->id }}";
    var isUser = "{{ Auth::user() }}"
</script>

{{ HTML::script('path/to/js/file.js') }}

そしてあなたのjavascriptファイルで:

if(isUser)
{
    if(path.indexOf('/user/' + userID ) != -1) {
        $( "#tabs" ).tabs();
    };
}
41
Brandon Romano

私は@BrandonRomanoと同じことをしていましたが、より良いアプローチを見つけました。 PHPからJS変数に値を直接送信する: PHP-Vars-To-Js-Transformer

PHP:

JavaScript::put([
    'foo' => 'bar',
    'user' => User::first(),
    'age' => 29
]);

JS:

console.log(foo); // bar
console.log(user); // User Obj
console.log(age); // 29

次のような名前空間を設定できます。

console.log(server.foo)
3
Luco

PHPから文字列を出力しているので、その文字列を'で囲む必要があります。

<script type="text/javascript">
    @if(Auth::user())
        if(path.indexOf('/user/' + '{{Auth::user()->id}}' ) != -1) {
                $( "#tabs" ).tabs();
        };
    @endif
</script>
1
Andreyco