Laravel 5.6-全局和动态变量

时间:2018-11-27 15:59:25

标签: php laravel session config global

我有一个使用laravel 5.6的API,我需要创建可以在整个应用程序中更改其值的全局变量,但是我遇到了问题。

示例: -在第一个请求时,此变量的值为“ test”; -在第二个请求中,我想获取当前值,应该是“ test”;

  1. 我最初尝试使用配置,但是没有用;
  2. 我尝试使用Session,但是我遇到了同样的问题;
  3. 我试图在“超级控制器”中设置一个变量,所有控制器都扩展到该变量,但它不起作用。

该变量的值仅在执行请求期间有效,即我向控制器aaaControler发出请求,这利用了其他控制器,在同一请求内该值仍然存在,但以返回值结束

我想到要保留在数据库中,创建一个引用并始终在此获取该值,但这是最好的方法吗?

在这件事上我寻求帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果您只需要为一个请求提供一个“全局”变量(可在项目的每个类中访问),我认为一个好的解决方案是在运行时设置配置值。 config帮助程序可用于读取和写入不会在另一个请求上保留的值。

您可以在任意位置设置一个值:

config(['any.key.you.want' => 'Some value']);

并在各处阅读:

config('any.key.you.want');
=> 'Some value'

如果您通过实例化其他控制器并调用其方法(我认为这对您的代码组织不利-您应该使用服务类)来使用其他控制器,效果很好。

如果您使用其他使用HTTP请求的控制器,则它将不起作用。如果是这种情况,最好的解决方案可能是按照您的建议将其持久化到数据库中或使用会话。您可以使用以下方法之一存储值,然后在HTTP请求后清除:

session()->put('any.key.you.want', 'Some value');
// make http request to another controller
session()->forget('any.key.you.want');

在HTTP请求调用的控制器中,您可以获得会话值:

session('any.key.you.want');
=> 'Some value'

如果您的HTTP请求是异步的,则您可能会遇到一些竞争状况。

答案 1 :(得分:0)

事实是您的每个API请求都是一个全新的请求,经历了从index.php到JSON(或其他)响应的整个周期。为了在本质上不同的请求之间保存变量,您将不得不使用数据库,文件存储或会话(带有一些注释)。