如何在Laravel中设置全局变量?

4

我正在开发一个应用程序,想要使用CURL获取一些数据,我正在使用Guzzle来获取这些信息。在每个请求中,我需要放置参数api_token。我没有请求的问题,但是我需要创建全局变量或配置这些值。我的问题是:如何定义这些值并在我所做的每个请求中使用它们?

    $response = $client->request('POST', 'https://api.iugu.com/v1/payment_token?api_token=API_TOKEN', [
      'json' => [
          'account_id' => $account_id,
          'method' => $method,
          'test' => true,
          'data' => [[
            'number' => $number,
            'verification_value' => $verification_value,
            'first_name' => $first_name,
            'last_name' => $last_name,
            'month' => $month,
            'year' => $year
          ]]
      ]
    ]);

当我使用纯PHP创建项目时,我会使用以下代码:

require 'environment.php';

$config = array();

if(ENVIRONMENT == 'development') {
    define("BASE_URL", "http://localhost/plans/");
    define("ACCOUNT_ID", "SECRET");
    define("ACCESS_TOKEN", "SECRET");
    $config['db_name'] = 'SECRET';
    $config['host'] = 'localhost';
    $config['db_user'] = 'root';
    $config['db_password'] = 'XXXXXX';
} else {
    define("BASE_URL", "http://www.blablabla/test");
    define("ACCOUNT_ID", "SECRET");
    define("ACCESS_TOKEN", "MY_TOKEN");
    $config['db_name'] = 'INSERIR DATABASE';
    $config['host'] = 'INSERIR HOST';
    $config['db_user'] = 'INSERIR USUARIO';
    $config['db_password'] = 'INSERIR SENHA';
}

global $database;

try {
    $database = new PDO("mysql:dbname=".$config['db_name'].";host=".$config['host'], $config['db_user'],$config['db_password']);
} catch (Exception $ex) {
    echo "Erro: ".$ex->getMessage();
    exit;
}

environment.php中:

<?php

define("ENVIRONMENT", "development");
//define("ENVIRONMENT", "production");

1
将它们放入你的 .env 文件中? - Daan
我会将其重构为一个专用服务,并为其创建一个接口,然后将该服务绑定到服务提供者中的合同。然后在该服务提供者中,使用config()助手从.env文件中获取API密钥。如果您在多个位置进行类似的请求,则比单个服务类更难维护。 - Matthew Daly
我提供了2种在Laravel中创建全局变量的解决方案。请检查一下,如果可以正常工作,请告诉我。 - Amit Gupta
2个回答

7
所有这些值都应该在你的.env文件中。然后,你需要通过使用env()助手在配置文件中读取这些值。
'variable' => env('SOME_DATA'),

然后,您就可以使用以下代码在全局范围内使用这些值:

config('config_file.variable')

1
非常感谢你,Alexey!运行得非常好! - Vinícius

3
对于全局变量,您可以在config文件夹中创建一个文件,如constants.php
constants.php文件中,您可以像下面这样定义全局变量api_token
<?php
return [
    'api_token' => env('API_TOKEN','https://api.iugu.com/v1/payment_token?api_token=API_TOKEN'),
];
?>

现在您可以使用以下两个函数之一访问此变量:
Config::get('constants.api_token')
config('constants.api_token')

针对Blade文件,请按以下方式操作:
{{ config('constants.api_token') }}

另一种选择是在位于Controllers文件夹中的Controller.php文件的__construct函数中设置全局变量,如下所示:
class Controller extends BaseController
{
    public $api_token;

    public function __construct(){
    $this->api_token = "https://api.iugu.com/v1/payment_token?api_token=API_TOKEN";
}

我不确定您的问题确切是想将api_tokenENVIRONMENT作为全局变量,但这两种解决方案都可以解决您的问题。

1
不是一个好主意,因为这样你就不能轻松地针对每个环境进行更改。无论如何,它作为类常量会更好,而不是属性。 - dhinchliff
@dhinchliff 请再次检查,随时可以尝试离线!两种解决方案都可以。我已经在使用 :) - Amit Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接