Laravel擴展開發

擴展包初始化

  • composer init基礎信息配置
  • 聲明依賴illuminate/support(提供ServiceProvidor支持)

擴展包業務邏輯

自行組織,沒有特殊要求php

擴展包組件

Config配置

  • 發佈配置文件
  • 可選的register方法中合併包的默認配置$this->mergeConfigFrom(__DIR__.'.../xxx.php', 'xxx');

Artisan命令

# boot方法中註冊
 if ($this->app->runningInConsole()) {
     $this->commands([
         XxxCommand::class,
         ...
     ]);
 }

Route路由

  • boot方法中裝載包的路由 $this->loadRoutesFrom(__DIR__.'.../routes.php');

View視圖

  • boot方法中裝載$this->loadViewsFrom(__DIR__.'.../views', 包名);或發佈文件
  • 用戶覆蓋視圖resources/views/vendor/包名
  • 使用:return view('包名::視圖名')

Migration遷移

  • boot方法中裝載 $this->loadMigrationsFrom(__DIR__.'.../migrations');或發佈文件

Translation翻譯

  • boot方法中裝載 $this->loadTranslationsFrom(__DIR__.'.../translations', 包名);或發佈文件
  • 使用翻譯 echo trans('courier::filename.strname');

發佈包文件

php artisan vendor:publish [--tag=發佈組標識] --forcelaravel

#boot方法中註冊待發布文件
$this->publishes(
	[
	 $from => $to
	    __DIR__.'.../xxx.php' => config_path('xxx.php'), //配置文件
	    __DIR__.'.../migrations' => database_path('migrations'), //遷移文件
	    __DIR__.'.../views' => resource_path('views/vendor'), //視圖文件
	    __DIR__.'.../translations' => resource_path('lang/vendor'), //翻譯文件
	],
	[可選的發佈組標識]
);

拓展包ServiceProvidor

  • 繼承自Illuminate\Support\ServiceProvider
  • 處理業務:容器實例綁定,或資源加載(視圖、配置、本地文件等)

拓展包安裝方案

  • 應用config/app.php -> $providors裝載
  • 拓展包composer.json -> extra節區配置包發現從而自動裝載
"extra": {
	    "laravel": {
	        "providers": [ //包裝載
	            "Xxx\\YyyServiceProvider"
	        ],
	        "aliases": { //Facade裝載
	            "Zzz": "Xxx\\ZzzFacade"
	        },
	        "dont-discover": [ //禁止裝載
	            "Mmm/Nnn",
	            "*"
	        ]
	    }
	}
相關文章
相關標籤/搜索