【问题标题】:Get/Set global variable in Class in Laravel在 Laravel 的类中获取/设置全局变量
【发布时间】:2017-06-07 08:40:19
【问题描述】:

我不明白如何制作全局变量,以便将来更改它的值并一遍又一遍地获取它? 我的控制器示例:

public function getProducts()
{
    // some stuff
    $products = SQLquery;
    config(['memoProducts' => $products]);
    $value = config('memoProducts');
    dd($value)//returns what I need

}

public function setProducts()
{
    //here I try to get $products from previous function
    $value = config('memoProducts');
    dd($value)//returns null
}

我的问题是什么?

PS:感谢您认为我很愚蠢并且整天都在回答我的问题,即使您的回答似乎都没有帮助。非常感谢

【问题讨论】:

  • 使用配置或.env
  • @hafiz .env 不应该用于全局变量,它专门用于环境变量。

标签: php laravel global-variables


【解决方案1】:

有很多方法可以设置和获取全局变量,其中一种是设置为config

config(['app.timezone' => 'America/Chicago']);

并从config读取该值

$value = config('app.timezone', 'fallback value');

Documentation

编辑

在运行时设置的配置值仅针对当前请求设置,不会延续到后续请求。

因此您可以使用其他技术,例如 Cache

public function setProducts()
{
    $products = SQLquery;
    Cache::put('products', $products, 60); // Third parameter is the time limit
}

public function getProducts()
{
    //here I try to get $products from previous function
    $products = Cache::get('products');
}

或使用Session

public function setProducts()
{
    $products = SQLquery;
    session(['products' => $products]);
}

public function getProducts()
{
    //here I try to get $products from previous function
    $products = session('products');
}

【讨论】:

  • 是的,但是如何改变它的值呢?
  • 只需更改配置键config(['app.timezone' => 'new value']);的值
  • 我试过这个,它在一个函数内工作。但是当我尝试在一个函数中设置值,然后进入同一类的另一个函数时,我得到null
  • 确保您使用相同的键来设置值
  • getProducts() 应该在 setProducts() 之前调用,以便设置配置键。你可以试试setProducts() { $this->getProducts(); // rest of the code
【解决方案2】:

有多种方式可以通过应用传递信息。首先我们可以使用config()来设置和获取。

您可以选择使用session() 来获取和设置。

您还可以向request() 对象添加变量,例如request()->global_var = 'test'

【讨论】:

  • 我尝试了 request() 的东西,但它在 2 个功能之间不起作用
  • 说它不起作用一点帮助也没有,有错误吗?您到底在哪里使用代码,您没有粘贴任何代码或与问题相关的任何内容。
  • @linktoahref 说到这个,我错过了 IoC 和单例,因为我觉得它比新手理解的要复杂一些。
  • @Ian :是的,绝对的!
【解决方案3】:

您可以在 config 文件夹中创建 constants.php 文件。

return [

    'country_name' => env('COUNTRY_NAME','Bangladesh'),
    'city_name' => env('CITY_NAME','Dhaka')
];

您可以通过两种方式访问​​此变量

Config::get('constants.country_name')
config('constants.country_name')

刀片

{{ config('constants.country_name') }}

【讨论】:

  • 实现它并不是那么全球化。我只需要同一个类中的几个变量来在函数之间传递数据
  • 您可以按照 getter 和 setter 方式进行示例:class Foo { private $bar; public function getBar() { return $this->bar; } 公共函数 setBar($bar) { $this->bar = $bar; } } $foo = 新的 Foo(); $foo->setBar(1); $foo->setBar($foo->getBar() + 1);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
相关资源
最近更新 更多