Ожидаемое выражение window.Laravel.userId = - PullRequest
0 голосов
/ 17 декабря 2018

Я создаю приложение с использованием Laravel, Vuejs и редактора 'PHPstorm'

Я написал следующий код в моем app.blade.php файле внутри <head></head> tag

@if(!auth()->guest())
        <script type="text/ecmascript-6">
            window.Laravel.userId = <?php echo auth()->user()->id; ?>
        </script>
    @endif


</head>
<body>

в phpstorm отображается ошибка 'ожидаемое выражение'.enter image description here Какое решение для этого?

(обратите внимание на новые обновления моего вопроса), тогда Мой следующий вопрос заключается в том, что я хочу использовать это в моем app.js file

console.log (window.Laravel.userId)

if (window.Laravel.userId) {

- вышеуказанный кодэто правильный способ использовать его в файле .js или есть лучшее решение ??

(новое обновление) Мой код

Здесь я добавляю свой код app.blade.php

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">


    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">


    <script type="text/ecmascript-6">
        window.Laravel = '<?php echo json_encode([
                'csrfToken' => csrf_token(),
        ]); ?>'
    </script>

@if(!auth()->guest())
        <script>
            window.Laravel.userId = '<?php echo auth()->user()->id; ?>'

         </script>
     @endif


 </head>
 <body>
     <div id="app">
         <nav class="navbar navbar-default navbar-static-top">
             <div class="container">
                 <div class="navbar-header">

                     <!-- Collapsed Hamburger -->
                     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse" aria-expanded="false">
                         <span class="sr-only">Toggle Navigation</span>
                         <span class="icon-bar"></span>
                         <span class="icon-bar"></span>
                         <span class="icon-bar"></span>
                     </button>

                     <!-- Branding Image -->
                     <a class="navbar-brand" href="{{ url('/') }}">
                        {{ config('app.name', 'Laravel') }}
                    </a>
                </div>

                <div class="collapse navbar-collapse" id="app-navbar-collapse">
                    <!-- Left Side Of Navbar -->
                    <ul class="nav navbar-nav">
                        &nbsp;
                    </ul>

                    <!-- Right Side Of Navbar -->
                    <ul class="nav navbar-nav navbar-right">


                        {{--add code here extra for notification--}}
                        @if(Auth::check())
                            <lesson v-bind:lessons="lessons"></lesson>
                        @endif




                    <!-- Authentication Links -->
                        @guest
                            <li><a href="{{ route('login') }}">Login</a></li>
                            <li><a href="{{ route('register') }}">Register</a></li>
                        @else
                            <li class="dropdown">
                                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
                                    {{ Auth::user()->name }} <span class="caret"></span>
                                </a>

                                <ul class="dropdown-menu">
                                    <li>
                                        <a href="{{ route('logout') }}"
                                            onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                            Logout
                                        </a>

                                        <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                                            {{ csrf_field() }}
                                        </form>
                                    </li>
                                </ul>
                            </li>
                        @endguest
                    </ul>
                </div>
            </div>
        </nav>

        @yield('content')
    </div>

    <script src="{{ asset('js/app.js') }}"></script>
</body>
</html>

app.js

require('./bootstrap');

window.Vue = require('vue');

window._=require('lodash');
window.$=window.jQuery =require('jquery');


Vue.component('lesson', require('./components/LessonNotification.vue'));
const app = new Vue({
    el: '#app',
    data:{
        lessons:''
    },
    created(){
       console.log(window.Laravel.userId);
        if(window.Laravel.userId){
            axios.post('/notification/lesson/notification').then(response => {
                this.lessons=response.data;
                console.log(response.data)
            });

            Echo.private('App.User.'+window.Laravel.userId).notification((response) =>{
                data={"data":response};
                this.lessons.push(data);
            });

        }
    }

});

Основная задача кода

Собственно, основная тема или задача моего кода заключается в том, что я хочу использовать или получить залогиненный пользовательская информация в любых скриптах, в частности .js файл.Вот почему я сначала настраиваю или определяю информацию о зарегистрированном пользователе .. следующий код в app.blade.php

@ if (! Auth () -> guest ()) window.Laravel.userId =пользователь () -> ID;?> @ endif

Тогда, так как мне нужно вошедший в систему идентификатор пользователя. Поэтому я вызвал его следующим кодом в app.js

console.log (window.Laravel.userId)

Мой ответ от @ vivek_23

<script type="text/ecmascript">
        window.Laravel = JSON.parse('<?php echo json_encode([
                'csrfToken' => csrf_token(),
        ]); ?>');
    </script>

<!-- This makes the current user's id available in javascript -->

    @if(!auth()->guest())
        <script>
            window.Laravel.userId = '<?php echo auth()->user()->id; ?>'
        </script>
    @endif

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Вы должны использовать синтаксис blade для отображения переменных в представлениях:

@if(!auth()->guest())
    <script type="text/ecmascript-6">
        window.Laravel.userId = {{ auth()->user()->id }};
    </script>
@endif
0 голосов
/ 17 декабря 2018

Добавьте одинарные кавычки в ваше выражение, или я бы посоветовал вам лучше использовать интерполяцию {{}}, которую обеспечивает синтаксис 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> 
0 голосов
/ 17 декабря 2018

Поместите ваше утверждение в кавычки, подобные этому

window.Laravel.userId = "<?php echo auth()->user()->id; ?>"

Я только что проверил это, и оно работает. Пожалуйста, попробуйте это

...