我的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,请记住,是的,你可以缩小 - 但你不能混淆,因为这会改变变量名! 您将如何使用此解决方案并且还能进行混淆处理?可以做到吗?在保留特定变量的同时可能允许混淆的任何技巧? 您可以确保变量名称 userIDisUser 不会通过将它们绑定到全局范围(如 window.userIDwindow.isUser)而被混淆......这是什么无论如何,您都需要在单独的 JS 文件中访问这些变量。像 UglifyJS 这样的混淆器应该检测到一个变量正在访问全局范围,并且默认情况下不会混淆它们。但如果有任何不确定性,那么通过window 显式访问就会清楚。 我不喜欢这个解决方案,因为它污染了全局范围,我通常将变量传递给我的 JS 的方法是 &lt;input id="isUser" type="hidden" value=" Auth::user() " /&gt; 然后使用 $('#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 变量?

如何将数据循环到laravel刀片javascript中的数组中?

如何从刀片模板中的 Javascript 文件重定向 Laravel 路由