Laravel:AppServiceProvider 注册 API 密钥?

Posted

技术标签:

【中文标题】Laravel:AppServiceProvider 注册 API 密钥?【英文标题】:Laravel: AppServiceProvider to register an API Key? 【发布时间】:2021-09-08 23:58:53 【问题描述】:

我对 Larvel 还很陌生,所以提前为我认为是一个微不足道的问题道歉。

我正在使用 Stripe 作为我的支付处理器构建一个商店页面,他们的 php 库要求用户注册一个 API 密钥。

到目前为止,我一直在创建结帐会话的控制器的第一行中设置我的 API 密钥。这对我来说似乎很不自然,我认为会有更好的方法在应用程序启动时“全局”设置此 API 密钥。

然后我遇到了 AppServiceProvider,据我了解,它可用于在启动时执行任务。我现在在它的 register() 函数中设置我的 API 密钥,如下所示:

public function register() 
    \Stripe\Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

这可行,但我想知道这是否正常和最佳实践。 Laravel 文档提到这是注册事件侦听器甚至路由的好地方,但没有提及类似于 API 密钥或设置第三方库的注册的任何内容。

提前致谢!

【问题讨论】:

【参考方案1】:

一个建议是不要在代码中除了配置文件之外的任何地方调用 env。最好在 config 文件夹中创建配置文件。

例如在config 文件夹中创建一个名为stripe.php 的文件

<?php

return [
    'stripe_secret_key'=>env('STRIPE_SECRET_KEY')
];

然后就可以访问了

 \Stripe\Stripe::setApiKey(config('stripe.stripe_secret_key'));

这有助于你缓存配置。如果你运行 php artisan config:cache 那么它不会调用 env

根据文档

如果您在部署期间执行 config:cache 命令 过程中,你应该确保你只调用了 env 函数 从您的配置文件中。一旦配置完成 缓存,.env 文件将不会被加载并且所有对 env 的调用 函数将返回 null。

参考:https://laravel.com/docs/8.x/helpers#method-env

寄存器和启动方式的区别

“在所有提供程序都已注册后,它们将被“启动”。这 将在每个提供程序上触发 boot 方法。一个常见的错误,当 使用服务提供商正在尝试使用由 register 方法中的另一个提供程序。由于,在登记册内 方法,我们无法保证所有其他提供程序都已加载, 您尝试使用的服务可能尚不可用。所以,服务 使用其他服务的提供程序代码应始终存在于引导中 方法。 register 方法应该只用于,你猜对了, 向容器注册服务。在引导方法中,您 可以做任何你喜欢的事情:注册事件监听器,包含一个路由 文件、注册过滤器或任何你能想象到的东西。”

所以寄存器一仅用于绑定。启动是实际上 触发某事发生。

参考:https://laracasts.com/discuss/channels/general-discussion/difference-between-boot-and-register-method

【讨论】:

"这可行,但我想知道这是否正常和最佳实践。"显然是在寻找一个离题的意见。你不应该回答这些问题。 @miken32.i 同意你的看法。我只是想提一下,所以如果有人在寻找类似的答案,那么可以参考 如果有人在寻找类似的答案,他们的问题也是题外话,应该关闭。 @miken32.okay。明白了:) @miken32 寻求意见时应该去哪里?

以上是关于Laravel:AppServiceProvider 注册 API 密钥?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:laravel 可翻译插件

win 怎么laravel命令

laravel 安装失败

laravel validator怎么验证整数

Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 |拉拉维尔 |图片 |验证

laravel和mongo怎么搭配使用