【问题标题】:How can I access Laravel Helper from Javascript?如何从 Javascript 访问 Laravel Helper?
【发布时间】:2020-06-17 18:49:55
【问题描述】:

我有一个 Laravel Web 应用程序,想从任何 .js 文件访问我的 Laravel Helper。

通常我从 Blade.php 文件中的脚本访问助手,如下所示:-

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

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

如果可能隐藏本地存储数据,那么我的问题将得到解决。

【问题讨论】:

标签: javascript php laravel helper


【解决方案1】:

我找到了答案。基本上,没有直接的方法可以在.js 文件中编写 PHP 代码。这是获取 PHP/Laravel 变量或 Laravel Helper 的 3 种简单方法。

解决方案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();
})

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

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

希望对你有很大帮助。快乐编码

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      或者,创建一个资源端点,可以在您的 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 
      })
      

      【讨论】:

        猜你喜欢
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        相关资源
        最近更新 更多