Packages是向Laravel中添加功能最重要的途徑。composer.json中require的都是包。關于包的詳細說明請查看API. 下面一起創建一個簡單的Package :
1. 環境配置
我們以Artisan的workbench
命令來創建一個Package ,首先要配置app/confg/workbench.php
1 <?php2 3 return array(4 5 'name' => 'brudeke', 6 7 'email' => 'xxxxxxxx@163.com',8 9 );
2. 創建Package
其中vendor是廠商名稱,用于區別相同名稱的包;package是要創建的包名;
1 php artisan workbench vendor/package --resources
執行以上命令后會在根目錄出現workbench目錄,其中workbench/vendor/package/src/Vendor/Package目錄下會自動生成PackageServiceProvider.php(以下稱此文件為引導類),該文件相當于包的引導類。
3. 在包中添加功能類
在這里我們在包中添加一個工具類,在“引導類”的同級創建Utils/Turbo.php
1 <?php 2 3 namespace Vendor/Package/Utils; 4 5 use Illuminate/Http/RedirectResponse; 6 7 html' target='_blank'>class Turbo { 8 9 public function __construct() {}10 11 public function setUp(){12 echo "this is a tool";13 } 14 }
4. 創建Facades
Facades的功能就是美化類,可以使成員函數以靜態成員的方式調用,在引導類同級創建Facades/Turbo.php
1 <?php 2 namespace Vendor/Package/Facades; 3 4 use Illuminate/Support/Facades/Facade; 5 6 class Turbo extends Facade { 7 8 protected static function getFacadeAccessor() { 9 return 'turbo';10 }11 }
5. 綁定功能類到Ioc容器
修改引導類如下,其中$defer是表示延遲加載服務提供器?! ?/p>
1 <?php 2 namespace Vendor/Package; 3 4 use Illuminate/Support/ServiceProvider; 5 6 class PackageServiceProvider extends ServiceProvider { 7 8 /** 9 * Indicates if loading of the provider is deferred.10 *11 * @var bool12 */13 protected $defer = true;14 15 /**16 * Bootstrap the application events.17 *18 * @return void19 */20 public function boot(){21 $this->package('vendor/package');22 }23 24 /**25 * Register the service provider.26 *27 * @return void28 */29 public function register(){30 $this->app->bindShared('turbo', function(){31 return new /Vendor/Package/Utils/Turbo;32 });33 }34 35 /**36 * Get the services provided by the provider.37 *38 * @return array39 */40 public function provides()41 {42 return array('turbo');43 }44 45 }
6.修改配置app/config/app.php
在providers數組中添加以下代碼:
1 "providers" => array(2 'Vendor/Package/PackageServiceProvider', 3 ),
在aliases數組中添加別名Turbo:
1 'aliases' => array(2 'Turbo' => 'Vendor/Package/Facades/Turbo',3 ),
接下來就可以在項目任何地方以Turbo::setUp()的形式運用包了。
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答