sebastiaanluca / laravel-conditional-providers
根据当前环境加载 Laravel 服务提供者。
Requires
- php: ^7.3
- laravel/framework: ^6.0|^7.0
Requires (Dev)
- orchestra/testbench: ^4.0|^5.1
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2022-03-07 15:04:15 UTC
README
根据当前环境加载 Laravel 服务提供者和外观。
直接在配置文件中指定每个环境要加载的服务提供者和外观。无需再在 AppServiceProvider
中添加冗长的条件代码块,就像处理任何服务提供者和外观一样,在应用程序配置文件中完成所有操作!
受 Matt Staufer、Sven Luijten 以及其他人的启发。
目录
它解决了什么问题?
假设你正在项目中使用像 barryvdh/laravel-ide-helper 这样的软件包。如果你已按照其安装说明进行操作,并且仅需要在开发环境中使用它(你应该这样操作),你将执行以下操作
composer require barryvdh/laravel-ide-helper --dev
然后,将服务提供者添加到应用程序的配置 providers 数组中
'providers' => [ Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, ]
现在,当你运行 composer install --no-dev
以在生产环境中安装除开发包之外的所有包时,这将抛出异常。Laravel 将尝试加载已注册的服务提供者类,但找不到它,因为该软件包未安装。
[Symfony\Component\Debug\Exception\FatalThrowableError]
Class 'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider' not found
当然,你可以按照说明在 app/Providers/AppServiceProvider.php
文件的 register 方法中手动条件加载提供者
public function register() { if ($this->app->environment() !== 'production') { $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class); } }
但是,你必须为每个开发包和每个你不想加载的环境执行此操作,这几乎无法维护,并且会污染你应用程序特定的代码。
使用 Laravel 条件提供者 轻松在主应用程序配置文件中完成所有这些操作!
要求
- PHP 7.3 或更高版本
- Laravel 6.0 或更高版本
如何安装
composer require sebastiaanluca/laravel-conditional-providers
如何使用
条件提供者
通过将其添加到 composer.json 的相关部分来禁用包的提供者自动发现
"extra": { "laravel": { "dont-discover": [ "barryvdh/laravel-debugbar" ] } },
设置完成后,只需将每个环境的 providers 数组添加到你的 config/app.php
文件中
'providers' => [ // Contains your global providers which will load in any environment ], 'local_providers' => [ // Contains your 'local' environment providers // Mostly used to load debug helpers, optimization tools, et cetera Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, Barryvdh\Debugbar\ServiceProvider::class, ], 'production_providers' => [ // Contains your 'production' environment providers // Great for when you only want to get analytics or // bug reports in production and disable the provider // entirely when developing. ],
每个 providers 键是 可选的,可以是空的——因此你可以使用 local_providers
数组或根本不使用。
上面的示例将在 local
环境中执行以下操作
- 从
providers
加载每个提供者 - 从
local_providers
加载每个提供者 - 忽略所有在
production_providers
中的内容
完成!现在你的应用服务提供商已经清理干净,你可以更好地了解加载了什么以及何时加载,而且可以根据环境启用或禁用包。
条件别名
除了条件加载提供者之外,此工作流程也适用于别名/外观。在 config/app.php
文件中为每个环境添加一个 facades/aliases 数组,如下所示:
'aliases' => [ // Contains your global aliases which will load in any environment ], 'local_aliases' => [ // Contains your 'local' environment aliases/facades 'Debugbar' => Barryvdh\Debugbar\Facade::class, ], 'production_aliases' => [ // Contains your 'production' environment aliases/facades ],
就是这样!这将在本地环境中仅加载 Debugbar
外观。
许可协议
此软件包遵循 MIT 许可协议 (MIT)。有关更多信息,请参阅 LICENSE。
变更日志
请参阅 CHANGELOG 了解最近的变化。
测试
composer install
composer test
贡献
请参阅 CONTRIBUTING 和 CONDUCT 了解详细信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件 hello@sebastiaanluca.com 联系我们,而不是使用问题跟踪器。
致谢
关于
我叫Sebastiaan,是一名自由职业的Laravel开发者,专门从事构建定制Laravel应用程序。查看我的 作品集 了解更多信息,我的博客 了解最新技巧和窍门,以及我的其他 软件包 以启动您的下一个项目。
您有一个可能需要一些指导的项目吗?请通过电子邮件 hello@sebastiaanluca.com 联系我!