什么是服务提供者
服务提供者是 Laravel 应用整体启动流程的核心。你自己的应用以及 Laravel 的所有核心服务,都是通过服务提供者进行启动的。 「启动(bootstrapping)」在这里意味着:注册服务容器的绑定、事件监听器、中间件、路由等各类内容。服务提供者是配置应用的中心位置。 Laravel 内部使用大量服务提供者来启动邮件、队列、缓存等核心服务。这些提供者中的许多是「延迟」提供者,只有真正需要其提供的服务时才会加载,而不是每次请求都加载。 用户自定义的服务提供者需要在bootstrap/providers.php 文件中注册。
想更深入了解 Laravel 如何处理请求,请参阅请求生命周期文档。
编写服务提供者
所有服务提供者都继承自Illuminate\Support\ServiceProvider。大多数服务提供者会同时包含 register 与 boot 方法。
要生成新的提供者,请使用 make:provider Artisan 命令。Laravel 会自动在 bootstrap/providers.php 中注册新的提供者。
register 方法
在register 方法中,仅应向服务容器进行绑定注册。请勿在 register 中注册事件监听器、路由或其他功能——因为此时可能会错误地使用尚未加载的服务提供者所提供的服务。
$this->app 属性访问服务容器。
bindings 与 singletons 属性
若需要注册大量简单的绑定,除了逐条注册,还可以使用bindings 与 singletons 属性。框架加载服务提供者时会自动检查这些属性并注册绑定。
boot 方法
如需在服务提供者中注册视图 Composer,请写在boot 方法中。该方法会在其他所有服务提供者都注册完毕之后调用,因此可以访问框架已注册的所有服务。
boot 方法中的依赖注入
boot 方法也可以通过类型提示注入依赖。服务容器会自动注入所需的依赖。
注册服务提供者
所有服务提供者都在bootstrap/providers.php 文件中注册。该文件返回一个包含应用服务提供者类名的数组。
在 Laravel 13 中,不再使用
config/app.php 的 providers 数组,而是通过 bootstrap/providers.php 注册服务提供者。make:provider 命令会自动添加。make:provider Artisan 命令时,Laravel 会自动在该文件里添加提供者。如果是手动创建的提供者类,请手动将其添加到数组中。
创建自定义服务提供者
下面演示实际编写一个自定义服务提供者。1
生成提供者
使用 Artisan 命令生成服务提供者。
2
在 register 方法中绑定
在生成的提供者的
register 方法中编写绑定。3
注册到 bootstrap/providers.php
使用
make:provider 时会自动注册。若为手动创建,请添加:延迟提供者(Deferred Providers)
如果提供者只用于注册服务容器绑定,那么可以推迟该提供者的注册,直到真正需要绑定时才加载。通过延迟这类提供者的加载,就不会在每次请求时都从文件系统加载,从而提升性能。 要创建延迟提供者,请实现\Illuminate\Contracts\Support\DeferrableProvider 接口并定义 provides 方法。provides 方法返回该提供者所注册的服务容器绑定。
下一步
服务容器
详细了解服务容器机制与绑定。