【问题标题】:How to pass Laravel editable settings to Vue如何将 Laravel 可编辑设置传递给 Vue
【发布时间】:2020-05-25 18:04:52
【问题描述】:

我的应用中有一些设置可以由管理员更改(例如每个用户在创建新产品时可以选择的产品类别)。我将它们存储在由“名称”和“值”列组成的数据库“设置”表中。

我还添加了一个服务提供者,它将这些设置添加到配置中并缓存它们。我可以从 Laravel 轻松访问它们,但不能从前端(使用 Vue)访问它们。

有没有办法从 Vue 访问 Laravel 配置值?我试过this answer 但没有成功。我应该在每个 API 调用中都请求设置吗?

【问题讨论】:

    标签: laravel vue.js


    【解决方案1】:

    如果您的设置是动态的,您必须在每次 API 调用时请求它们。

    如果没有,您可以在部署前端代码时获得这些设置。

    【讨论】:

    • 设置是动态的,我应该将它们保存在 Laravel 配置中并在控制器中返回 config('settings') 以避免查询数据库吗?
    • @Aryal config('settings') 在后台进行缓存。如果将设置存储在数据库中,则必须在每次更改设置缓存时重新验证设置缓存。你明白吗?
    • 这就是我想做的。由于设置很少会被更改,我想我可以从缓存中受益。
    • @Aryal 你真的有性能问题吗?我宁愿避免缓存,如果不需要它There are only two hard things in Computer Science: cache invalidation and naming things. - Martin Fowler
    【解决方案2】:

    我不知道我是否正确理解了您的问题,但是...

    Laravel 配置是后端的一部分。在前端访问它们的唯一方法是将它们传递给它。

    除非有一些我不知道的花哨的技巧,否则在客户端加载和运行的 Vue.js 应用程序将无法访问您的服务器端配置——除非有一些东西说拖它们在我不知道的编译过程中加入,这充其量只会让我觉得有风险。

    但一般来说,客户端无头应用程序无法访问服务器端数据,除非服务器说“这里客户端,有这个数据。”

    例如

    class MyApiController extends Controller
    {
        function getThisConfig()
        {
              return config('this');
        }
    }
    

    与:

    Route::get('/api/config/this', ['uses' => 'MyApiController@getThisConfig']);
    

    然后您的 Vue.js 应用程序会向 /api/config/this 发送 AJAX 请求。

    【讨论】:

    • 嗯,有一种方法可以通过在 .env 文件中使用 MIX_ 前缀来access environmental variables,我发现一些迹象表明它可以通过配置完成,这就是我要问的花哨的诡计:)
    • 一些我确实不知道的诡计!但是,这难道不是只在涉及 Mix 时才暴露它——即当你的应用程序被编译时? laravel.com/docs/6.x/mix#environment-variables
    • 我认为你是对的。我必须重新运行应用程序才能使更改生效。我要做API调用。不过,您对缓存设置有何看法?
    • 我认为最好不要将config().env 用于与您的应用程序/Laravel 配置明确相关的任何内容;诸如数据库配置、第三方 API 访问密钥等之类的东西。听起来您要添加的内容(商店类别等)会更适合其自己的处理程序;它更多的是你商店的“配置”,而不是你整个应用的脚手架。
    • 至于缓存......这真的取决于用例。如果需要它很好,但如果你不需要它则不值得担心。我想说,在您的每日请求达到数千之前,您可能不必担心缓存。
    猜你喜欢
    • 2019-08-13
    • 2022-11-24
    • 2018-12-03
    • 2018-10-25
    • 2018-06-20
    • 2017-02-17
    • 2020-07-30
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多