目錄php
composer create-project --prefer-dist laravel/laravel framework "5.4.*"
app同級目錄建立packages文件夾,而後依照下面目錄層次建立文件夾,文件能夠稍後建立
目錄層次以下:html
| |—— packages | |—— archerwong | |—— larapackage 實際咱們開發包的根目錄 | |—— src | |—— ArcherWong | |—— LaraPackage | |—— LaraPackage.php 定義facades | |—— LaraPackageProvider.php 定義服務提供者 | |—— MoreAction.php 定義服務提供者提供的各類服務 | |—— Controllers | |—— IndexController.php 和下面的包路由配合,實現控制器--路由聯動 | |—— views 視圖文件夾 | |—— message.blade.php | |—— welcome.blade.php | |—— routes.php 包路由 | |—— composer.json
"autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/", "ArcherWong\\LaraPackage\\":"packages/archerwong/larapackage/src/" } },
注意:從新生成autoload文件 ,命令:composer dump-autoloadreact
填入下面內容laravel
{ "name": "archer-wong/larapackage", "description": "how to develop a laravel package", "license": "MIT", "authors": [ { "name": "archer-wong", "email": "wong_chiu@163.com" } ], "minimum-stability": "dev", "require": { "php": ">=5.6.4" }, "autoload": { "psr-0": { "ArcherWong\\LaraPackage": "src/" } } }
注意:根據本身的須要增長依賴等。。。git
文件內容以下github
<?php namespace ArcherWong\LaraPackage; use Illuminate\Support\Facades\Facade; class LaraPackage extends Facade { public static function getFacadeAccessor() { //return 的字符串會在相應的provider中使用 return 'larapackage'; } }
內容以下json
<?php namespace ArcherWong\LaraPackage; use Illuminate\Support\ServiceProvider; class LaraPackageProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { //註冊擴展包視圖,並起個名字,方便咱們調用該文件夾下的視圖 $this->loadViewsFrom(__DIR__.'/../../views','LaraPackageView'); //註冊擴展包路由,使用php artisan route:list 命令能夠查看是否生效 $this->loadRoutesFrom(__DIR__.'/../../routes.php'); //能夠將相應的資源(不只限於views文件夾)發佈到laravel項目的某個位置,下面將views文件夾放到了咱們經常使用的視圖文件夾下 $this->publishes([ __DIR__.'/../../views'=>base_path('resources/views/vendor/lara-package'), ]); } /** * Register the application services. * * @return void */ public function register() { //這裏使用到了facades中的字符串 $this->app->singleton('larapackage',function(){ //咱們能夠經過facades的aliase訪問下面的MoreAction //會在config的app.php文件中進行服務提供者和別名的註冊 return $this->app->make('ArcherWong\LaraPackage\MoreAction'); }); } }
文件內容以下:vim
<?php namespace ArcherWong\LaraPackage; class MoreAction { public function getInfo() { $user_ip = $_SERVER["REMOTE_ADDR"]; $time = date('Y-m-d H:i:s'); return ['user_ip' => $user_ip, 'time' => $time]; } }
注意:如下內容和上面有個分割,上面其實已經實現一個包最簡單的功能,以上只是返回一個包含ip和時間的數組,開發您的腦洞,固然能夠實現各類複雜功能。segmentfault
在控制器中:數組
利用門面得到 LaraPackage::getInfo(); 返回包中的視圖 return view('LaraPackageView::welcome',['data' => $data]);
在視圖中:
@include('LaraPackageView::message')
下面內容是爲了演示laravel包開發中的控制器,路由,視圖的開發。
<?php namespace ArcherWong\LaraPackage\Controllers; use Illuminate\Routing\Controller as BaseController; use Illuminate\Support\Facades\View; use LaraPackage; class IndexController extends BaseController { public function index() { //$data = 'Hello World'; $data = LaraPackage::getInfo(); //能夠直接使用建立的包裏的視圖,注意調用是兩個冒號 return view('LaraPackageView::welcome',['data' => $data]); } }
1> welcome.blade.php文件
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Laravel</title> </head> <body> <!--能夠直接引入視圖中的其餘文件--> @include('LaraPackageView::message') <div> 您的ip地址是:{{ $data['user_ip'] }} </div> <div> 當前時間是:{{ $data['time'] }} </div> </body> </html>
2> message.blade.php 文件
<div> <div> <div>學習laraval擴展包開發</div> </div> </div>
<?php //包中路由配置文件 Route::get('hello','ArcherWong\LaraPackage\Controllers\IndexController@index');
$ vim welcome.blade.php
1> 首先建立一個github項目
拿到對應的倉庫地址 :git@github.com:archer-wong/larapackage.git
2> 而後進入packages/archerwong/larapackage文件夾下(也就是咱們開發的包的根目錄),將包內容上傳到github
git init git add . git commit -m "first commit" git remote add origin git@github.com:archer-wong/larapackage.git git push -u origin master
3>去倉庫的setting => Intergrations&services添加Packagist同步服務,
此時須要你的packagist的帳號信息,因此咱們先進入https://packagist.org(使用github帳號登陸,免去麻煩),找到右上角的submit按鈕,輸入咱們剛上傳包的github倉庫地址,進行check驗證
審覈經過後,相似以下,記下包的packagist地址https://packagist.org/packages/archer-wong/larapackage
而後繼續咱們的github和packagist的自動同步設置
用戶信息,請填寫帳號,不要寫郵箱地址
進入我的信息能夠拿到token信息
domain地址填寫剛拿到的包packagist地址
此時咱們的版本是dev-master
引入的方法是 composer require archer-wong/larapackage 「dev-master"
不加版本會報錯
若是後期有人提出了一些issues你去修改了本身的package
那麼咱們會去增長別的tag 也是就是說你修改package以後 再去添加一個tag:
git tag -a 0.1.1 -m 'first version'
填寫說明信息後 推送這個tag:
git push origin --tags
https://segmentfault.com/a/1190000009069449
https://d.laravel-china.org/docs/5.4/packages#public-assets
https://d.laravel-china.org/docs/5.4/providers
https://d.laravel-china.org/docs/5.4/facades