30. Laravel 开发第三方包
Laravel 开发第三方包
使用 Contracts 代替 Facades,因为扩展包不能访问 Laravel 提供的所有测试 Facades 的辅助函数。
自动发现和注册 Facades
"extra": {
"laravel": {
"providers": [
"Barryvdh\\Debugbar\\ServiceProvider"
],
"aliases": {
"Debugbar": "Barryvdh\\Debugbar\\Facade"
}
}
},
用户可以禁止自动发现
"extra": {
"laravel": {
"dont-discover": [
"barryvdh/laravel-debugbar"
]
}
},
// 禁止所有
"extra": {
"laravel": {
"dont-discover": [
"*"
]
}
},
设置发布配置文件
public function boot()
{
$this->publishes([
__DIR__.'/path/to/config/courier.php' => config_path('courier.php'),
]);
}
// 使用:$value = config('courier.option');
合并用户的和第三方包的配置文件
// 用户定制配置会覆盖第三方包的。只会合并第一层,用户嵌套数组将被忽略
public function register()
{
$this->mergeConfigFrom(
__DIR__.'/path/to/config/courier.php', 'courier'
);
}
注册路由、迁移、翻译,设置发布翻译,注册视图
// 如果用户路由已经缓存,就不会加载第三方包的路由
public function boot()
{
$this->loadRoutesFrom(__DIR__.'/routes.php');
}
public function boot()
{
$this->loadMigrationsFrom(__DIR__.'/path/to/migrations');
}
public function boot()
{
$this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');
}
// package::file.line 使用翻译
echo trans('courier::messages.welcome');
public function boot()
{
$this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');
$this->publishes([
__DIR__.'/path/to/translations' => resource_path('lang/vendor/courier'),
]);
}
public function boot()
{
$this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');
}
使用第三方包的视图
Route::get('admin', function () {
return view('courier::admin');
});
// package::view
先加载 resources/views/vendor/courier,没有再加载第三方包下面的
public function boot()
{
$this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');
$this->publishes([
__DIR__.'/path/to/views' => resource_path('views/vendor/courier'),
]);
}
注册命令
// 注册命令
public function boot()
{
if ($this->app->runningInConsole()) {
$this->commands([
FooCommand::class,
BarCommand::class,
]);
}
}
发布资源
public function boot()
{
$this->publishes([
__DIR__.'/path/to/assets' => public_path('vendor/courier'),
], 'public');
}
// 更新包时候,强制覆盖资源目录下的文件,请使用 --force
php artisan vendor:publish --tag=public --force
设置标签,方便批量发布
public function boot()
{
$this->publishes([
__DIR__.'/../config/package.php' => config_path('package.php')
], 'config');
$this->publishes([
__DIR__.'/../database/migrations/' => database_path('migrations')
], 'migrations');
}
// 批量发布某个标签下的文件,请使用 --tag
php artisan vendor:publish --tag=config
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)