包开发
简介
包是向 Laravel 添加功能的主要方式。包可以是任何东西,从处理日期的好方法(如 Carbon)到允许你将文件与 Eloquent 模型关联的包(如 Spatie 的 Laravel Media Library)。
有不同类型的包。有些包是独立的,意味着它们适用于任何 PHP 框架。Carbon 和 Pest 是独立包的例子。任何这些包都可以通过在 composer.json 文件中引入来与 Laravel 一起使用。
另一方面,其他包专门用于 Laravel。这些包可能有专门用于增强 Laravel 应用程序的路由、控制器、视图和配置。本指南主要涵盖那些 Laravel 特定包的开发。
关于门面的说明
在编写 Laravel 应用程序时,使用契约还是门面通常并不重要,因为两者都提供基本相同的可测试性级别。但是,在编写包时,你的包通常无法访问所有 Laravel 的测试辅助函数。如果你希望能够像包安装在典型 Laravel 应用程序中一样编写包测试,可以使用 Orchestral Testbench 包。
包发现
Laravel 应用程序的 bootstrap/providers.php 文件包含 Laravel 应该加载的服务提供者列表。但是,不需要用户手动将你的服务提供者添加到列表中,你可以在包的 composer.json 文件的 extra 部分定义提供者,以便 Laravel 自动加载它。除了服务提供者,你还可以列出你希望注册的任何门面:
"extra": {
"laravel": {
"providers": [
"Barryvdh\\Debugbar\\ServiceProvider"
],
"aliases": {
"Debugbar": "Barryvdh\\Debugbar\\Facade"
}
}
},一旦你的包配置为发现,Laravel 将在安装时自动注册其服务提供者和门面,为你的包用户创建方便的安装体验。
退出包发现
如果你是包的消费者并希望禁用某个包的包发现,可以在应用程序的 composer.json 文件的 extra 部分列出包名称:
"extra": {
"laravel": {
"dont-discover": [
"barryvdh/laravel-debugbar"
]
}
},你可以在应用程序的 dont-discover 指令中使用 * 字符禁用所有包的包发现:
"extra": {
"laravel": {
"dont-discover": [
"*"
]
}
},服务提供者
服务提供者是你的包和 Laravel 之间的连接点。服务提供者负责将东西绑定到 Laravel 的服务容器并通知 Laravel 在哪里加载包资源,如视图、配置和语言文件。
服务提供者继承 Illuminate\Support\ServiceProvider 类并包含两个方法:register 和 boot。基础 ServiceProvider 类位于 illuminate/support Composer 包中,你应该将其添加到自己的包依赖中。要了解更多关于服务提供者的结构和目的,请查看它们的文档。
资源
配置
通常,你需要将包的配置文件发布到应用程序的 config 目录。这将允许你的包用户轻松覆盖你的默认配置选项。要允许发布你的配置文件,从服务提供者的 boot 方法调用 publishes 方法:
/**
* 引导任何包服务。
*/