我的javascript文件中的Laravel 4刀片语法
Posted
技术标签:
【中文标题】我的javascript文件中的Laravel 4刀片语法【英文标题】:Laravel 4 blade syntax within my javascript files 【发布时间】:2013-08-07 03:22:20 【问题描述】:我的主页有一些内联 javascript,其中包含一些刀片语法,例如
<script type="text/javascript">
@if(Auth::user())
if(path.indexOf('/user/' + Auth::user()->id ) != -1)
$( "#tabs" ).tabs();
;
@endif
</script>
在我想将 javascript 移动到外部 file.js 之前,它一直有效。每当添加刀片语法时,我都会出错。有没有办法可以在我的 javascript files.js 中融合刀片语法?我尝试重命名为 file.blade.js 没有运气...
【问题讨论】:
Uncaught SyntaxError: Unexpected token ILLEGAL => @if 这对我来说确实很有效。你应该把它作为一个答案。我意识到我的主页被 javascript 弄得太乱了。我相信这不会导致额外的请求,因此页面加载速度是相同的。你为什么反对它? 没有什么具体原因,就是没看懂。 我发现刀片语法很简单。但主要问题是我的页面被javascript超载 【参考方案1】:您正在从 php 输出字符串,因此您必须将该字符串包含在 '
中
<script type="text/javascript">
@if(Auth::user())
if(path.indexOf('/user/' + 'Auth::user()->id' ) != -1)
$( "#tabs" ).tabs();
;
@endif
</script>
【讨论】:
我收到一个错误:Uncaught SyntaxError: Unexpected token ILLEGAL => @if 文件名是什么?它应该命名为whatever.blade.php
这是一个 .blade.php 文件,但是当我将 @if 语句也用 in 括起来时,错误消失了。像'@if(Auth::user())'。问题是,刀片 php 没有运行【参考方案2】:
您可以尝试将您的 javascript 文件保存在 app/views
文件夹中并将其重命名为 xxx.blade.php
,是的 .blade.php
因为 Blade Engine 只会在其 .blade.php
并使用 @ 时解析它987654325@ 包含 Blade 解析的 javascript 文件,它将起作用。
【讨论】:
【参考方案3】:虽然公认的解决方案会起作用,但这绝对是一种反模式。
如果我看到这不是写它的人,我会对发生的事情感到非常困惑。
我的建议是在你的 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();
;
【讨论】:
加 1 用于分离职责并允许我在需要时缩小我的 js @BillGarrison,请记住,是的,你可以缩小 - 但你不能混淆,因为这会改变变量名! 您将如何使用此解决方案并且还能进行混淆处理?可以做到吗?在保留特定变量的同时可能允许混淆的任何技巧? 您可以确保变量名称userID
和 isUser
不会通过将它们绑定到全局范围(如 window.userID
和 window.isUser
)而被混淆......这是什么无论如何,您都需要在单独的 JS 文件中访问这些变量。像 UglifyJS 这样的混淆器应该检测到一个变量正在访问全局范围,并且默认情况下不会混淆它们。但如果有任何不确定性,那么通过window
显式访问就会清楚。
我不喜欢这个解决方案,因为它污染了全局范围,我通常将变量传递给我的 JS 的方法是 <input id="isUser" type="hidden" value=" Auth::user() " />
然后使用 $('#isUser').val()
从 JS 中获取它【参考方案4】:
我的做法与@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)
【讨论】:
以上是关于我的javascript文件中的Laravel 4刀片语法的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 4 中的表单将 innherHtml 传递的元素上传到数据库
环境目录中的 database.php 文件未在 Laravel 4 中加载
Laravel中的Javascript问题与csrf一起形成
如何访问 javascript 中的 laravel .env 变量?