Laravel 开发扩展包基本流程

688 阅读4分钟
原文链接: segmentfault.com

介绍

Laravel中就有Laravel Composer Package开发的相关介绍 这其中需要运用 Service Providers 当然对于我们Laravel开发人员
来说 开发一个扩展包还是很值得学习的 现在就来开发一个消息通知的扩展包

扩展包的地址:github.com/GeekGhc/Lar…

整个package参照 Jeffrey WayFlash Packages

新建包

在生成好的Laravel项目中新建packages目录(和app同级) 接着在packages目录下新建包目录 packages/geekghc/laraflash

我们需要去laravel项目下去声明包的命名空间:

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/",
        "GeekGhc\\LaraFlash\\":"packages/geekghc/laraflash/src/"
    }
},

声明完毕之后别忘了去执行重新生成autoload文件

$ composer dump-autoload

我们需要新建src目录来存放我们的源文件

接着因为我们是开发一个扩展包 之后还需要进行测试开发 所以我们去生成一个composer.json文件

$ composer init

填写完基本信息之后 在packages/geekghc/laraflash目录下就会生成一个composer.json文件:

我先给出

{
    "name": "geekghc/flash",
    "description": "flash for laravel",
    "license": "MIT",
    "authors": [
        {
            "name": "GeekGhc",
            "email": "ghcgavin@sina.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.5.9",
    },
    "require-dev": {
        "phpunit/phpunit": "~5.7",
        "mockery/mockery": "0.9.*"
    },
    "autoload": {
        "psr-0": {
            "GeekGhc\\LaraFlash": "src/"
        },
        "files": [
            "src/GeekGhc/LaraFlash/function.php"
        ]
    }
}

完成好composer.json后 我们可以去src/GeekGhc/LaraFlash目录下新建一个Flash.php

<?php
namespace GeekGhc\LaraFlash;
use Illuminate\Support\Facades\Facade;
class Flash extends Facade
{
    public static function getFacadeAccessor()
    {
        return 'laraflash';
    }
}

我们这里继承了Facade类,用Facades可以访问IoC容器中注册的类 这样我们就可以去调用注册的类

同时我们需要去新建一个Service Provider

$ php artisan make:provider FlashProvider

将生成的 app/Providers/FlashProvider.php 文件移动到我们的 packages/geekghc/laraflash/src/GeekGhc/LaraFlash/ 目录下面,并注册 FlashProviderconfig/app.php

FlsahProvider里面我们去写一下之后我们需要绑定的类:

public function register()
{
    $this->app->bind(
        'GeekGhc\LaraFlash\SessionStore',
        'GeekGhc\LaraFlash\LaravelSessionStore'
    );

    $this->app->singleton('laraflash',function(){
        return $this->app->make('GeekGhc\LaraFlash\FlashNotifier');
    });
}

这边我们就绑定了封装好的SessionStore 之后我们去配置一下视图的路径

public function boot()
{
    $this->loadViewsFrom(__DIR__.'/../../views','laraflash');
    $this->publishes([
        __DIR__.'/../../views'=>base_path('resources/views/vendor/laraFlash'),
    ]);
}

这里我们就发布了我们的视图文件 如果在项目里去执行

$ php artisan vendor:publish

我们就可以在resources/views/vendor/laraFlash去自定义自己需要的样式效果

接着在config/app.php去注册我们的服务

'providers' => [
    GeekGhc\LaraFlash\MyFlashProvider::class,
];

为了方便使用 可以再去添加一个alias

'aliases' => [
    'LaraFlash'=>GeekGhc\LaraFlash\Flash::class,
];

接着我们可以去实现flash的主要功能服务 每个包的功能都根据需求而来 这里也不多做介绍
最后的目录结构是这样的

|
|—— packages 
| |—— geekghc
|   |—— laraflash 
|     |—— src            源文件
|       |—— GeekGhc      源文件
|         |—— LaraFlash     
|           |—— Flash.php     
|           |—— FlashNotifier.php     
|           |—— function.php     
|           |—— FlashProvider.php     
|           |—— SessionStore.php     
|           |—— LaravelSessionStore.php     
|       |—— views        视图文件
|     |—— tests          测试目录
|     |—— vendor         测试需要的包
|     |—— .gitignore    
|     |—— composer.json    
|     |—— composer.lock    
|     |—— phpunit.xml  
|     |—— readme.md

这样的话 我们就在本地写好了扩展包 我们其实可以去创建一个控制器去测试我们这个包是否正常

在视图home.blade.php我们就可以去包含views里面的视图文件

@include('laraflash::notification')

或者

@include('laraflash::header-notification')

接着在控制器去使用类似这样的形式:

  • LaraFlash::success('Message')

  • LaraFlash::info('Message')

  • LaraFlash::error('Message')

  • LaraFlash::warning('Message')

包的具体使用去GeekGhc/LaraFlash看一下具体使用就知道了

最后的效果大概就是这样的:

显示正常之后我们就可以去发布我们的package

github先创建一个仓库 当然我这里的就是创建了LaraFlash这个远程仓库

紧接着我们去推好我们的代码到github

接着我们需要去仓库的setting => Intergrations&services添加Packagist服务(填写好用户名和Token)

添加完毕之后去Packagist Submit这个仓库(提供远程仓库的地址)

github进入packagist测试通过之后就ok了

因为我们之前定义的dev版本 如果后期有人提出了一些issues你去修改了自己的package

那么我们会去增加别的tag 也是就是说你修改package之后 再去添加一个tag:

$ git tag 2.0 -a

填写说明信息后 推送这个tag:

$ git push --tags

这样一来我们就发布了v2.0这个版本 这就是我们发布扩展包大概流程

博客文章地址Laravel Package

参考资料