如何从Javascript访问Laravel Helper?

prdp8dxp  于 2023-03-31  发布在  Java
关注(0)|答案(3)|浏览(98)

我有一个Laravel Web应用程序,并希望从任何.js文件访问我的Laravel Helper。
通常我从blade.php文件中的脚本访问helper,如下所示:

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

但是我想从我的 script.js 文件访问它。这可能吗?我已经尝试了localStorage,并且很容易获得它,但问题是,在网站设置中有一些安全的数据。
如果可以
隐藏localStorage数据
,那么我的问题就解决了。

5ssjco0h

5ssjco0h1#

我找到了答案。基本上,没有直接的方法可以在.js文件中编写PHP代码。这里有3种获取PHP/Laravel变量或Laravel Helper的简单方法。
解决方案1.调用 AJAX 并从js获取返回值,并根据需要使用它。

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

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

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

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

解决方案3.我一直在使用的最后一个也是最好的方法是:在刀片中添加外部脚本,并在脚本中添加getter和setter方法,以便您可以在js中设置刀片文件中的值。

// 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

uinbv5nw

uinbv5nw2#

我觉得你最好还是做你现在做的事。
或者,在script.js文件中创建一个可以在页面加载时返回这些设置的JSON的资源端点:

// 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 
})
eqfvzcg8

eqfvzcg83#

最简单的解决方案是在getSiteSettings函数中使用 AJAX 或Axios(使用vue)调用一个API,并在api的响应中返回数据。

相关问题