在Laravel
中就有Laravel Composer Package開發的相關介紹 這其中須要運用 Service Providers 固然對於咱們Laravel
開發人員
來講 開發一個擴展包仍是很值得學習的 如今就來開發一個消息通知的擴展包php
擴展包的地址:https://github.com/GeekGhc/LaraFlashlaravel
整個
package
參照Jeffrey Way
的Flash Packagesgit
在生成好的Laravel
項目中新建packages
目錄(和app
同級) 接着在packages
目錄下新建包目錄 packages/geekghc/laraflash
github
咱們須要去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/
目錄下面,並註冊 FlashProvider
到 config/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