PHPstorm 中预期的表达式 window.Laravel.userId = <?php
Expression Expected window.Laravel.userId = <?php in PHPstorm
我正在使用 Laravel、Vuejs 和编辑器 'PHPstorm'
构建应用程序
我在 app.blade.php 文件中的 <head></head>
标签
中写了以下代码
@if(!auth()->guest())
<script type="text/ecmascript-6">
window.Laravel.userId = <?php echo auth()->user()->id; ?>
</script>
@endif
</head>
<body>
它在 phpstorm 中显示 'expression expected' 错误。
解决方案是什么?
(注意我的问题的新更新)
那么我的下一个问题是我想在我的 app.js 文件
中使用它
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">
</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);
});
}
}
});
主要任务代码
实际上,我的代码的主题或任务是我想在任何脚本中使用或获取 logged-in 用户信息,特别是 .js 文件。这就是为什么首先我设置或定义记录的用户信息.. app.blade.php
中的以下代码
@if(!auth()->guest())
window.Laravel.userId = user()->id; ?>
@endif
然后因为我需要logged-in用户id.所以我在app.js[中通过以下代码调用它=22=]
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
像这样把你的陈述放在引号里
window.Laravel.userId = "<?php echo auth()->user()->id; ?>"
我刚刚测试了这个及其工作
请试试这个
您应该在视图中使用 blade syntax to display variables:
@if(!auth()->guest())
<script type="text/ecmascript-6">
window.Laravel.userId = {{ auth()->user()->id }};
</script>
@endif
在表达式中添加单引号,否则我建议您更好地使用 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>
您上面的代码在 window.Laravel
中有一个字符串(JSON 字符串),而不是 JSON object。您可以执行额外的 JSON.parse() 使其成为 JSON object,如下所示。
<script type="text/ecmascript">
window.Laravel = JSON.parse('<?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>');
</script>
现在,您正在尝试获取 logged-in 用户 ID。
<script>
window.Laravel.userId = '<?php echo auth()->user()->id; ?>'
</script>
上面的代码可以正常工作,因为我们将 window.Laravel
的类型从 JSON string
固定为 object
。
但最好将其保留为 integer/number 本身。
<script>
window.Laravel.userId = <?php echo auth()->user()->id; ?>;
</script>
建议:
由于您使用的是 Laravel 框架,因此最好始终使用 Laravel blade 语法而不是处理 PHP 标记。因此,它会更改您的代码片段,如下所示:
<script type="text/ecmascript">
window.Laravel = {!! json_encode(['csrfToken' => csrf_token()]) !!};
</script>
<script>
window.Laravel.userId = {{ auth()->user()->id }};
</script>
请注意使用 {!! !!}
而不是 {{ }}
。这是因为当你使用普通插值时,Laravel 会自动转义字符串内容,通过 htmlspecialchars() 传递它来防止 XSS 攻击。如果我们试图打印任何用户提供的信息,我们需要使用 {{}}
。在您的情况下,您正在生成一个 csrf 令牌并将令牌发送到客户端。因此,打印未转义的数据是安全的。
更多信息是here。
由于Laravel5.5
,我们可以直接使用@json
blade指令。
<script type="text/ecmascript">
window.Laravel = @json([
'csrfToken' => csrf_token()
]);
</script>
我正在使用 Laravel、Vuejs 和编辑器 'PHPstorm'
构建应用程序我在 app.blade.php 文件中的 <head></head>
标签
@if(!auth()->guest()) <script type="text/ecmascript-6"> window.Laravel.userId = <?php echo auth()->user()->id; ?> </script> @endif </head> <body>
它在 phpstorm 中显示 'expression expected' 错误。
(注意我的问题的新更新) 那么我的下一个问题是我想在我的 app.js 文件
中使用它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">
</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);
});
}
}
});
主要任务代码
实际上,我的代码的主题或任务是我想在任何脚本中使用或获取 logged-in 用户信息,特别是 .js 文件。这就是为什么首先我设置或定义记录的用户信息.. app.blade.php
中的以下代码@if(!auth()->guest()) window.Laravel.userId = user()->id; ?> @endif
然后因为我需要logged-in用户id.所以我在app.js[中通过以下代码调用它=22=]
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
像这样把你的陈述放在引号里
window.Laravel.userId = "<?php echo auth()->user()->id; ?>"
我刚刚测试了这个及其工作 请试试这个
您应该在视图中使用 blade syntax to display variables:
@if(!auth()->guest())
<script type="text/ecmascript-6">
window.Laravel.userId = {{ auth()->user()->id }};
</script>
@endif
在表达式中添加单引号,否则我建议您更好地使用 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>
您上面的代码在 window.Laravel
中有一个字符串(JSON 字符串),而不是 JSON object。您可以执行额外的 JSON.parse() 使其成为 JSON object,如下所示。
<script type="text/ecmascript">
window.Laravel = JSON.parse('<?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>');
</script>
现在,您正在尝试获取 logged-in 用户 ID。
<script>
window.Laravel.userId = '<?php echo auth()->user()->id; ?>'
</script>
上面的代码可以正常工作,因为我们将 window.Laravel
的类型从 JSON string
固定为 object
。
但最好将其保留为 integer/number 本身。
<script>
window.Laravel.userId = <?php echo auth()->user()->id; ?>;
</script>
建议:
由于您使用的是 Laravel 框架,因此最好始终使用 Laravel blade 语法而不是处理 PHP 标记。因此,它会更改您的代码片段,如下所示:
<script type="text/ecmascript">
window.Laravel = {!! json_encode(['csrfToken' => csrf_token()]) !!};
</script>
<script>
window.Laravel.userId = {{ auth()->user()->id }};
</script>
请注意使用 {!! !!}
而不是 {{ }}
。这是因为当你使用普通插值时,Laravel 会自动转义字符串内容,通过 htmlspecialchars() 传递它来防止 XSS 攻击。如果我们试图打印任何用户提供的信息,我们需要使用 {{}}
。在您的情况下,您正在生成一个 csrf 令牌并将令牌发送到客户端。因此,打印未转义的数据是安全的。
更多信息是here。
由于Laravel5.5
,我们可以直接使用@json
blade指令。
<script type="text/ecmascript">
window.Laravel = @json([
'csrfToken' => csrf_token()
]);
</script>