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. 编写扩展包信息啦~
接下来,我们来创建 PluginsServiceProvider
、Plugin
文件。目录结构如下:
1 | packages/neilyoz/plugins$ tree . |
2 | ├── composer.json |
3 | ├── src |
4 | │ └── Plugins |
5 | │ ├── Plugin.php |
6 | │ └── PluginsServiceProvider.php |
7 | └── tests |
1 |
|
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 |
|
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...
表时你已经成功了。