Добавьте одинарные кавычки в ваше выражение, или я бы посоветовал вам лучше использовать интерполяцию {{}}
, которую обеспечивает синтаксис Laravel blade.
<script type="text/ecmascript-6">
window.Laravel = {{ json_encode(['csrf_token' => csrf_token()]) }};
</script>
@if(!auth()->guest())
<script type="text/ecmascript-6">
window.Laravel.userId = {{ auth()->user()->id }};
</script>
@endif
# Обновление:
<script type="text/ecmascript-6">
window.Laravel = '<?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>'
</script>
В приведенном выше коде есть строка (строка JSON) в window.Laravel
, а не объект JSON.Вы можете сделать дополнительный JSON.parse () , чтобы сделать его объектом JSON, как показано ниже.
<script type="text/ecmascript">
window.Laravel = JSON.parse('<?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>');
</script>
Теперь вы пытаетесь получить зарегистрированный идентификатор пользователя.
<script>
window.Laravel.userId = '<?php echo auth()->user()->id; ?>'
</script>
Этот код, приведенный выше, будет работать как есть, потому что мы зафиксировали тип window.Laravel
из JSON string
to object
.
Но лучше всего сохранить его как целое число / само число.
<script>
window.Laravel.userId = <?php echo auth()->user()->id; ?>;
</script>
Предложение:
Поскольку выиспользуя каркас Laravel, лучше всегда использовать синтаксис блейдов Laravel, чем работать с тегами PHP.Таким образом, это изменило бы ваши фрагменты кода, как показано ниже:
<script type="text/ecmascript">
window.Laravel = {!! json_encode(['csrfToken' => csrf_token()]) !!};
</script>
<script>
window.Laravel.userId = {{ auth()->user()->id }};
</script>
Обратите внимание на использование {!! !!}
вместо {{ }}
.Это связано с тем, что при использовании обычной интерполяции Laravel автоматически экранирует строковое содержимое, чтобы предотвратить атаки XSS, передавая его через htmlspecialchars () .Нам нужно использовать {{}}
, если мы пытаемся напечатать любую предоставленную пользователем информацию.В вашем случае вы генерируете токен csrf и отправляете токен клиентской стороне.Следовательно, безопасно печатать данные без экранирования.
Более подробная информация здесь .
Начиная с Laravel 5.5
, мы можем напрямую использовать директиву @json
blade.
<script type="text/ecmascript">
window.Laravel = @json([
'csrfToken' => csrf_token()
]);
</script>