如何从 Javascript 访问 Laravel Helper?

How can I access Laravel Helper from Javascript?

我有一个 Laravel 网络应用程序,想从任何 .js 文件访问我的 Laravel 助手。

通常我从 blade.php 文件中的脚本访问帮助程序,如下所示:-

<script>
function getSiteSettings() {
    return JSON.parse('<?php echo json_encode(Helper::getSettings()) ?>');
}
</script>

但我想从我的 script.js 文件访问它。 可能吗? 我尝试使用 localStorage 并很容易地获取它,但问题是,在站点设置中有一些安全数据。

如果可以隐藏localStorage数据那么我的问题就解决了。

我认为你最好的选择是做你现在正在做的事情。

或者,创建一个资源端点,可以 return JSON 这些设置的页面加载到您的 script.js 文件中:

// script.js
document.addEventListener("DOMContentLoaded", function() {
     // make an ajax request here and load your setting in a js variable
});

// if using jquery
$(function() {
     // make an $.ajax request here and load your setting in a js 
})

最简单的解决方案是在 getSiteSettings 函数中使用 Ajax 或 Axios(正在使用 vue)调用 api,并在 api 的响应中调用 return 数据。

我找到了答案。基本上没有办法直接在.js文件里写PHP代码。这是获取 PHP/Laravel 变量或 Laravel 助手的 3 种简短方法。

解决方案 1.调用一个ajax并从js中获取return值并根据需要使用它。

$(function() {
     // ajax call
});

解决方案 2。任何 Laravel Helper/Var 都可以从 blade 文件访问,如下所示:

<script>
    let name = "{{ \Helper::get_name() }}";
</script>

并在 js 中的任何地方使用此名称。

解决方案 3。我一直在使用的最后也是最好的方法是: 在blade中添加外部脚本,在脚本中添加getter和setter方法,这样就可以在js中设置blade文件中的值了。

// in external/script.js script
var GetLaravelHelper = function () {
    let options = {
        name_from_laravel : ''
    }

    return {
        init: function(){
            // code for on load
        },
        set_options: function(data){
            Object.assign( options, data );
        },
        get_options: function(){
            return options;
        }
    }
}();

window.GetLaravelHelper = GetLaravelHelper; // You can get acces this GetLaravelHelper into balde file where you imort this js

document.onload(function(){
    GetLaravelHelper.init();
})

然后在 blade 中,您可以像这样将任何值设置到 Object 中:

<script src="external/script.js"></script>
<script>
   GetLaravelHelper.set_options({
        name_from_laravel: "{{ config('app.name') }}", // or anything from laravel/php
   })
</script>

希望对您有所帮助。快乐编码 <3