带有 inter-apis 调用的环境文件问题 laravel

Problem of environment files with inter-apis calls laravel

大家早上好,

作为开发演示 APIs 的一部分,我实现了两个 APIs :

第一个允许请求执行 HelloWorld,第二个允许根据定义的模板发送电子邮件。 在我的演示中,我从 Postman(或 React 应用程序)对 HelloWorld 进行了 API 调用,然后对 Notifier 进行了 API 调用以发送消息。

如果我从 Postman 直接调用我的 Notifier API 来发送电子邮件,我不会遇到任何问题(.env 文件配置得很好,可以在此 API 中发送电子邮件)。 另一方面,如果我将 API 从 HelloWorld 调用到 Notifier(HelloWorld 的 .env 文件未配置为发送电子邮件),我会遇到错误:

Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required

另一方面,如果我配置 HelloWorld API 的 .env 文件(它不会在任何时候发送电子邮件),我就不会再有任何错误和我的电子邮件由 Notifier 很好地发送。

这是 HelloWorld 中的 API 调用:

$client = new Client();

$response = $client->post("http://vhost-url.local/api/notifier/sendmail", [
    'json' => [
         'to' => $to,
         'template' => $template,
         'parameters' => $parameters
     ],
]);

这是在 Notifier API 中调用的操作:

public function sendmail(Request $request)
{
    $params = json_decode($request->getContent(), true);

    try{
        switch ($params['template']) {
            case 'HELLO_WORLD':
                Mail::to($params['to'])
                    ->send(new HelloWorld([
                        'message' => $params['parameters']['message']
                    ]));
                break;
            default:
                throw new \Exception("Ce template n'existe pas");
                break;
        }
    } catch(\Exception $e) {
        return response()
            ->json([
                'message' => $e->getMessage(),
            ], 500);
    }

    return response()
        ->json([
            'message' => 'Le mail a bien été envoyé'
        ], 200);

}

我的问题是:在 API 调用期间(在我的例子中使用 Guzzle),是否使用了源 API 的环境文件而不是目标 API 的环境文件]?如果是这样,如何解决这个问题?

我不确定这是否有帮助,但我遇到过类似的问题。 .env 文件在交叉通信 Laravel 项目时变得混乱(我相信只有 Windows)。

参见 https://github.com/laravel/framework/issues/19454 .

解决方案是 运行 php artisan config:cache 创建 .env 变量的缓存版本。请注意,您永远不应在代码中使用 env('...'),而应使用 config('app.env') 等配置文件来引用它们。 .env 由于这个原因,变量不能是动态的。

对于自定义环境变量,我通常创建一个 config/project.php 文件,如下所示:

return [
   'my_custom_var' => env('PROJECT_MY_CUSTOM_VAR')
];

这样你就可以缓存它并使用 config('project.my_custom_var');

调用变量