0%

Laravel扩展包的开发

Laravel在2020年03月02日,发布了7.0版本,从3用到7一直都是用别人开发的包,由于疫情真的但是日了狗,在家找工作都不方便,怎么办学习吖,程序员哪里有休息可言。

扩展包的开发

1. 创建一个新项目,初始化扩展包配置

首先创建一个全新的Laravel项目:

1
composer create-project laravel/laravel package_demo --prefer-dist

接下来,在项目中创建目录package/{your_name}/{your_package_name}

1
mkdir -p packages/neilyoz/plugins

进入到这个目录,执行composer init

1
cd packages/neilyoz/plugins
2
composer init

接下来的就是看你具体的配置包信息了。执行完成后会生成一个composer文件。

1
{
2
    "name": "neilyoz/plugins",
3
    "type": "library",
4
    "authors": [
5
        {
6
            "name": "Neilyoz",
7
            "email": "neilyoz@foxmail.com"
8
        }
9
    ],
10
    "require": {},
11
    "description": "plugins system build with laravel."
12
}

2. 创建扩展包基本目录,文件

一般情况下,我会创建一下的目录

1
packages/neilyoz/plugins$ tree .
2
├── composer.json
3
├── src
4
└── tests

3. 修改扩展包 composer 配置

然后修改我们这个扩展包的composer.json文件,设置一下自动加载配置、以及扩展包的命名空间。

1
{
2
    "name": "neilyoz/plugins",
3
    "type": "library",
4
    "authors": [
5
        {
6
            "name": "Neilyoz",
7
            "email": "neilyoz@foxmail.com"
8
        }
9
    ],
10
    "require": {},
11
    "description": "plugins system build with laravel.",
12
    "autoload": {
13
        "psr-4": {
14
            "Neilyoz\\": "src/"
15
        }
16
    },
17
    "autoload-dev": {
18
        "psr-4": {
19
            "Neilyoz\\Plugins\\Tests\\": "test/"
20
        }
21
    }
22
}

4. 编写扩展包信息啦~

接下来,我们来创建 PluginsServiceProviderPlugin 文件。目录结构如下:

1
packages/neilyoz/plugins$ tree .
2
├── composer.json
3
├── src
4
│   └── Plugins
5
│       ├── Plugin.php
6
│       └── PluginsServiceProvider.php
7
└── tests
1
<?php
2
3
namespace Neilyoz\Plugins;
4
5
use Illuminate\Support\ServiceProvider;
6
7
class PluginsServiceProvider extends ServiceProvider
8
{
9
    public function boot()
10
    {
11
12
    }
13
14
    public function register()
15
    {
16
        $this->app->singleton('plugins', function() {
17
            return new Plugin();
18
        });
19
    }
20
}
1
<?php
2
3
namespace Neilyoz\Plugins;
4
5
class Plugin
6
{
7
    public function printRunning()
8
    {
9
        return 'Provider running...';
10
    }
11
}

到这里已经开发了一个最简单Laravel的扩展包了。

扩展包本地测试

PluginsServiceProvider 添加到项目的 config/app.php 中的 providers 数组中

1
'providers' => [
2
    ...
3
    Neilyoz\Plugins\PluginsServiceProvider::class,
4
],

这个时候要修改 package_demo 项目下的 composer.json

1
{
2
    "require": {
3
        ...,
4
        "neilyoz/plugins": "dev-master"
5
    },
6
    ...,
7
    "autoload": {
8
        ...,
9
        "psr-4": {
10
            ...,
11
            "Neilyoz\\": "packages/neilyoz/plugins/src/"
12
        }
13
    },
14
    ...
15
}

运行命令:

1
composer dumpautoload
2
composer update

修改 routes/web.php 文件:

1
Route::get('/', function () {
2
    dd(app('plugins')->printRunning());
3
});

此时,我们打开浏览器访问,我这里项目对应url为:homestead.test,显示Provider running... 表时你已经成功了。

参考文章

如何开发、本地测试、发布Laravel扩展包