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

參考資料

相關文章
相關標籤/搜索