带有 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');
调用变量
大家早上好,
作为开发演示 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');