Синтаксис Laravel 4 в моих файлах javascript

У моей домашней страницы был встроенный javascript, смешанный с некоторым синтаксисом лезвия, например.

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

Он работал, пока я не захотел переместить javascript во внешний файл .js. Я получил ошибку всякий раз, когда был добавлен синтаксис лезвия. Есть ли способ, которым я могу сплавить синтаксис лезвия в javascript files.js? Я пробовал переименовать файл .blade.js без везения...

Ответ 1

вы можете попробовать сохранить файл javascript в папке app/views и переименовать его в xxx.blade.php, да .blade.php, потому что Blade Engine будет анализировать его, только если его .blade.php и использовать @include('your javascript filename') включить файл javascript, обработанный Blade, он будет работать.

Ответ 2

Хотя принятое решение будет работать, это, безусловно, антипаттерн.

Если бы я увидел, что это не тот, кто его написал, я был бы очень смущен тем, что происходит.

Мое предложение в вашем 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();
    };
}

Ответ 3

Я делал то же самое, что @BrandonRomano, но я нашел лучший подход. Отправляя непосредственно значение из PHP в JS vars, используя: 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)

Ответ 4

Вы выводите строку из PHP, поэтому вам нужно заключить эту строку в '

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