使用過Laravel的同學都知道Facades 的強大,下面就讓我們一起創建一個Facades 實例。如有不正確的地方,還請不吝賜教。
1. 實現Laravel的自動加載功能
首先建立目錄app/lib/Myapp,然後添加目錄到composer.json中
1 "autoload": {
2 "psr-0":{
3 "Myapp":"app/lib"
4 }
5 }
2. 實現功能類
實現能能類 app/lib/Myapp/Test.php
1 <?php
2 /**
3 * @author brudeke
4 */
5 namespace Myapp;
6 class Test{
7 public function do(){
8 echo 'this is a class';
9 }
10 }
3. 實現ServiceProvider
實現app/lib/Myapp/TestServiceProvider.php ,該類主要是將功能類添加到Ioc容器:
<?php
/**
* @author brudeke
*/
namespace Myapp;
use Illuminate\Support\ServiceProvider;
class TestServiceProvider extends ServiceProvider{
public function register() {
$this->app['test'] = $this->app->share(
function ($app) {
return new \Myapp\Test();
});
}
}
4. 實現Facade 實例
實現app/lib/Myapp/Facades/TestFacades.php, 該類的主要美化,實現成員函數類似靜態方法的調用形式
1 <?php
2 /**
3 * @author brudeke
4 */
5 namespace Myapp\Facades;
6
7 use Illuminate\Support\Facades\Facade;
8
9 class TestFacades extends Facade{
10 protected static function getFacadeAccessor()
11 {
12 return 'test';
13 }
14 }
5. 加載ServiceProvider
在app/config/app.php 中的providers中添加如下配置:
1 'providers' => array( 2 'Myapp\TestServiceProvider' 3 ),
在app/config/app.php 中的aliases中添加別名:
1 'aliases' => array( 2 'TestClass' => 'Myapp\Facades\TestFacades', 3 ),
接下來就可以在項目中以TestClass::do()的形式使用該功能類了。