所提及的服务提供商的分类仅与提供商的来源有关。所有服务提供商都以相同的方式工作,无论来源如何。以下是这些内容的细分:
-
应用程序服务提供者是您自己的提供者,通常位于 \App\Providers 命名空间中。 Laravel 样板应用程序默认带有 5 个(列出 here),它们是样板文件,因为它们提供基本的应用程序功能,但旨在由开发人员扩展和修改。
-
框架包提供者是 Laravel 附带的。它们通常位于 Illuminate 命名空间下,但确切的命名空间可能非常取决于它们的用途。这些通常提供关键的框架功能,不应删除或阻止其运行。
-
包服务提供商是源自 3rd 方包的服务提供商,例如来自 Spatie\Permission\PermissionServiceProvider::class 的 laravel 许可的服务提供商
创建提供者
可以使用命令创建应用程序提供者
php artisan make:provider ProviderName
这会在app/Providers 下创建一个新的提供者,但不会注册它。
注册服务商
应用程序和框架服务提供者(以及一些包服务提供者)在config/app.php 的providers 部分下注册。这允许开发人员控制它们运行的顺序。在 Laravel 5.5 之前,包服务提供者也需要在config/app.php注册。
这些提供程序用于构建存储在bootstrap/cache 下的提供程序缓存,这是实际读取并用于引导 Laravel 的内容
包自动发现
自 Laravel 5.5 起,以下命令已添加到 Laravel
php artisan package:discover
此命令遍历供应商文件夹,查找 composer.json 中包含以下内容的部分:
"extra": {
"laravel": {
"providers": [
"PackageVendor\\PackageName\\ServiceProvider"
],
}
},
这随后用于将其他提供程序添加到引导提供程序缓存中,而无需开发人员手动将它们添加到 config/app.php
此命令设置为在 Laravel 样板应用程序中的 composer autoload-dump 之后运行,该应用程序通常在大多数作曲家操作之后运行。
运行提供程序
引导提供程序缓存中包含的所有提供程序都按照它们定义的顺序运行,首先对它们每个调用register,然后对它们每个调用boot。
延迟提供者
有关延期提供者的信息可以在here 找到。简短的版本是,如果您的提供程序仅提供到服务容器的绑定,您可以仅在实际需要绑定时才推迟提供程序的运行。