Синтаксис 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>