Packages是向Laravel中新增功能最重要的途徑。composer.json中require的都是包。關於包的詳細說明請檢視 API . 下面一起建立一個簡單的Package :
1. 環境配置
我們以Artisan的workbench
命令來建立一個Package ,首先要配置 app/confg/workbench.php
<?php return array( 'name' => 'brudeke', 'email' => '[email protected]', );
2. 建立Package
其中vendor是廠商名稱,用於區別相同名稱的包;package是要建立的包名;
php artisan workbench vendor/package --resources
執行以上命令後會在根目錄出現workbench目錄,其中workbench/vendor/package/src/Vendor/Package目錄下會自動生成PackageServiceProvider.php(以下稱此檔案為引導類),該檔案相當於包的引導類。
3. 在包中新增功能類
在這裡我們在包中新增一個工具類,在“引導類”的同級建立Utils/Turbo.php
<?php namespace Vendor\Package\Utils; use Illuminate\Http\RedirectResponse; class Turbo { public function __construct() {} public function setUp(){
echo "this is a tool";
}
}
4. 建立Facades
Facades的功能就是美化類,可以使成員函式以靜態成員的方式呼叫,在引導類同級建立Facades/Turbo.php
<?php
namespace Vendor\Package\Facades; use Illuminate\Support\Facades\Facade; class Turbo extends Facade { protected static function getFacadeAccessor() {
return 'turbo';
}
}
5. 繫結功能類到Ioc容器
修改引導類如下,其中$defer是表示延遲載入服務提供器。
<?php
namespace Vendor\Package; use Illuminate\Support\ServiceProvider; class PackageServiceProvider extends ServiceProvider { /**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = true; /**
* Bootstrap the application events.
*
* @return void
*/
public function boot(){
$this->package('vendor/package');
} /**
* Register the service provider.
*
* @return void
*/
public function register(){
$this->app->bindShared('turbo', function(){
return new \Vendor\Package\Utils\Turbo;
});
} /**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return array('turbo');
} }
6.修改配置app/config/app.php
在providers陣列中新增以下程式碼:
"providers" => array(
'Vendor\Package\PackageServiceProvider',
),
在aliases陣列中新增別名Turbo:
'aliases' => array(
'Turbo' => 'Vendor\Package\Facades\Turbo',
),
接下來就可以在專案任何地方以Turbo::setUp()的形式運用包了。