Laravel 开发扩展包基本流程

介绍

Laravel中就有Laravel Composer Package开发的相关介绍 这其中须要运用 Service Providers 固然对于咱们Laravel开发人员
来讲 开发一个扩展包仍是很值得学习的 如今就来开发一个消息通知的扩展包php

扩展包的地址:https://github.com/GeekGhc/LaraFlashlaravel

整个package参照 Jeffrey WayFlash Packagesgit

新建包

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

咱们须要去laravel项目下去声明包的命名空间:shell

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

声明完毕以后别忘了去执行从新生成autoload文件json

$ composer dump-autoload

咱们须要新建src目录来存放咱们的源文件 app

接着由于咱们是开发一个扩展包 以后还须要进行测试开发 因此咱们去生成一个composer.json文件composer

$ composer init

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

我先给出学习

{
    "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

参考资料

相关文章
相关标签/搜索