在laravel根目录创建目录 packages/{your_name}/{your_package_name}
Windows下在laravel根目录下执行:
mkdir packages/kertag/closure-table
进入扩展包目录,初始化 composer 配置
cd packages/kertag/closure-table
初始化composer
composer init
在packages/kertag/closure-table/src目录下创建ClosureTable.php和ClosureTableServiceProvider.php文件:
ClosureTable.php
文件如下:
<?php
namespace Kertag\ClosureTable;
class ClosureTable
{
public function execute()
{
return 'execute';
}
}
ClosureTableServiceProvider.php
文件如下:
<?php
namespace Kertag\ClosureTable;
use Illuminate\Support\ServiceProvider;
class ClosureTableServiceProvider extends ServiceProvider
{
/**
* 服务提供者加是否延迟加载.
*/
protected $defer = true; // 延迟加载服务
/**
* Bootstrap the application services.
*/
public function boot()
{
$this->publishes([
__DIR__ . '/config/closure-table.php' => config_path('closure-table.php'),
]);
}
/**
* Register the application services.
*/
public function register()
{
$this->app->singleton('closure-table', function () {
return new ClosureTable;
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
// 因为延迟加载 所以要定义 provides 函数 具体参考laravel 文档
return ['closure-table'];
}
}
添加配置文件,在packages/kertag/closure-table/src下创建config目录来存取我们的配置参数文件closure-table.php
<?php
return [
'table' => 'member',
'closure' => 'member_closure'
];
把 ClosureTableServiceProvider添加到项目的config/app.php providers数组中
'providers' => [
...,
Kertag\ClosureTable\ClosureTableServiceProvider::class,
],
编辑 laravel 项目文件的 composer.json,其中url为项目绝对路径
"repositories": {
"jesseyChen": {
"type": "path",
"url": "E:\\kertag\\basic\\laravel\\packages\\kertag\\closure-table"
}
}
在 laravel 项目引入本地拓展包
composer require kertag/closure-table
发布资源文件
php artisan vendor:publish --provider="Kertag\ClosureTable\ClosureTableServiceProvider"