【问题标题】:Cache facade not working in Laravel 5缓存门面在 Laravel 5 中不起作用
【发布时间】:2016-12-04 16:08:09
【问题描述】:

我希望一些设置是用户可管理的。因此,我将它们存储在数据库中,然后检索和缓存它们。但是,当我尝试在 config/config.php 文件中调用 Cache 外观时,我收到错误消息。详情如下。

我在app/config/custom.php 有以下代码:

<?php 
// app/config/custom.php

use Illuminate\Support\Facades\Cache;

return [
   'foo' => Cache::get('foo');
];

这会吐出以下错误:

致命错误:在非对象上调用成员函数 get() D:\www\project\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php 在第 216 行

如何解决这个问题?

【问题讨论】:

  • 你开启缓存了吗?
  • @ToyRobotic 是的,我已将缓存驱动程序设置为“文件”。我怀疑这个问题是因为我试图在配置文件中使用缓存,虽然我不知道为什么这是一个问题
  • 如果我在 helpers.php 中没记错的话,Facades 位于全局命名空间中,你能将 use 语句更改为使用 Cache;
  • 这样写:\Cache::put('foo', 'bar');看看它是否会起作用
  • 你能分享你的custom.php代码吗?

标签: php laravel laravel-5


【解决方案1】:

正如 cmets 中所讨论的,配置文件并不意味着存储动态应用程序值,如果它是动态的(即用户特定值),您应该在应用程序的不同部分处理它们。

您可以使用服务提供者在整个应用程序中提供全局可用的东西。

【讨论】:

  • 感谢您的回答。我认为,它回答了为什么上面的代码不起作用。考虑到无法在配置文件中使用 Facades,我问了一个不同的问题。请在此处查看更详细的问题:stackoverflow.com/questions/38673236/…
  • 如前所述,我在这里的回答并不是为了获得更多声誉,而是为了社区利益。话虽如此,它回答了您的问题以及您收到错误的原因以及有关如何为不同的应用程序部分提供一些价值的一些建议。存储管理面板设置的最佳方式是通过 DB,在您提到设置邮件服务器设置的情况下,您可以从 Mailer 模型加载这些值。
  • 我宁愿避免在配置文件以外的地方加载设置,因为它会在代码库中引入不必要的混乱
  • 用户特定的设置并不意味着加载到配置文件中。配置文件用于系统范围的设置。在配置文件中加载用户特定的设置会造成您担心的混乱,因为它违反了标准系统架构。
  • 我需要实现用户可更改的设置。现在,想象一下,另一个开发人员继承了代码库。他去 smtp 设置并更改它们只是发现,他所做的更改没有效果!想象一下他的愤怒和挫败感,经过大量的汗水和泪水,他最终发现,邮寄者从一些非常规的地方而不是传统的地方进行设置。
猜你喜欢
  • 1970-01-01
  • 2016-09-26
  • 2017-02-25
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2022-07-05
  • 2021-07-09
相关资源
最近更新 更多