服务提供器(Service Providers)
Laravel 的核心服务都是通过服务提供器启动。启动即注册服务的意思,包括注册服务容器绑定、事件监听器、中间件甚至路由。
注册服务提供器
应用要加载的所有服务提供者信息保存于
config/app.php配置文件
- 很多服务提供者都是延迟加载的, 即只有使用到它们时才会进行加载
- 需要注册自己的服务提供者, 追加到
provides数组即可
示例代码
'providers' => [/** Laravel Framework Service Providers...*/Illuminate\Auth\AuthServiceProvider::class,Illuminate\Broadcasting\BroadcastServiceProvider::class,Illuminate\Bus\BusServiceProvider::class,Illuminate\Cache\CacheServiceProvider::class,Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,Illuminate\Cookie\CookieServiceProvider::class,Illuminate\Database\DatabaseServiceProvider::class,Illuminate\Encryption\EncryptionServiceProvider::class,Illuminate\Filesystem\FilesystemServiceProvider::class,Illuminate\Foundation\Providers\FoundationServiceProvider::class,Illuminate\Hashing\HashServiceProvider::class,Illuminate\Mail\MailServiceProvider::class,Illuminate\Notifications\NotificationServiceProvider::class,Illuminate\Pagination\PaginationServiceProvider::class,Illuminate\Pipeline\PipelineServiceProvider::class,Illuminate\Queue\QueueServiceProvider::class,Illuminate\Redis\RedisServiceProvider::class,Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,Illuminate\Session\SessionServiceProvider::class,Illuminate\Translation\TranslationServiceProvider::class,Illuminate\Validation\ValidationServiceProvider::class,Illuminate\View\ViewServiceProvider::class,/** Package Service Providers...*/Mews\Captcha\CaptchaServiceProvider::class,/** Application Service Providers...*/App\Providers\AppServiceProvider::class,App\Providers\AuthServiceProvider::class,// App\Providers\BroadcastServiceProvider::class,App\Providers\EventServiceProvider::class,App\Providers\RouteServiceProvider::class,],
自定义服务提供器
所有的服务提供器都继承自
Illuminate\Support\ServiceProvider类
创建服务提供器
使用 artisan 命令生成服务提供器,服务提供器的命名通常为 XXXX + ServiceProvider
php artisan make:provider MoeServiceProvider
主要实现的方法
大部分服务提供者都包含两个方法:
register和boot
register 方法
注册服务提供者, 只负责绑定服务到服务容器, 不要在该方法中注册事件监听器, 路由或任何其它功能
示例代码
public function register() {
$this->app->singleton(Connection::class, function ($app) {
return new Connection(config('moe'));
});
}
boot 方法
待补充
