sebastiaanluca/laravel-conditional-providers

该软件包已被弃用且不再维护。没有推荐替代软件包。

根据当前环境加载 Laravel 服务提供者。

5.0.0 2020-04-24 17:15 UTC

This package is auto-updated.

Last update: 2022-03-07 15:04:15 UTC


README

Latest stable release Software license Build status Total downloads Total stars

Read my blog View my other packages and projects Follow @sebastiaanluca on Twitter Share this package on Twitter

根据当前环境加载 Laravel 服务提供者和外观。

直接在配置文件中指定每个环境要加载的服务提供者和外观。无需再在 AppServiceProvider 中添加冗长的条件代码块,就像处理任何服务提供者和外观一样,在应用程序配置文件中完成所有操作!

Matt StauferSven 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

贡献

请参阅 CONTRIBUTINGCONDUCT 了解详细信息。

安全

如果您发现任何安全相关的问题,请通过电子邮件 hello@sebastiaanluca.com 联系我们,而不是使用问题跟踪器。

致谢

关于

我叫Sebastiaan,是一名自由职业的Laravel开发者,专门从事构建定制Laravel应用程序。查看我的 作品集 了解更多信息,我的博客 了解最新技巧和窍门,以及我的其他 软件包 以启动您的下一个项目。

您有一个可能需要一些指导的项目吗?请通过电子邮件 hello@sebastiaanluca.com 联系我!