Laravel实践-创建自定义Facade(Contract、S

2016-08-26  本文已影响981人  HBLong

做项目时需要用到Log,但是monolog需要进行初始化什么的,感觉很多处使用很冗余,于是想封装成一个LogFacade,直接调用。但laravel的文档看得不明不白的,于是就在这列举一下创建一个Facade的步骤

1.定义接口TestContract

path: ./laravel/app/Contract/TestContract.php
<?php 
namespace App\Contract;
interface TestContract
{
    public function test($msg='');
}
?>

2.实现接口TestContract

path: ./laravel/app/Contract/Test.php
<?php 
namespace App\Contract;
class Test implements TestContract
{
    public function test($msg=''){
        echo 'I am Test~ '.$msg;
    }
}
?>

3.创建服务提供者,提供Test服务

path: ./laravel/app/Contract/Test.php
<?php 
namespace App\Contract;
use Illuminate\Support\ServiceProvider;
use App\Contract\Test;

class TestServiceProvider extends ServiceProvider
{
    public function register(){
        // 绑定test与Test类的实例
        $this->app->singleton('test', function($app){
            return new Test();
        });
    }
}
?>

4.接下来就是创建TestFacade

path: ./laravel/app/Contract/Test.php
<?php 
namespace App\Contract;
use Illuminate\Support\Facades\Facade;

class TestFacade extends Facade
{
    // 这里的test跟服务提供者TestServiceProvider里面注册的'test'一致
    protected static function getFacadeAccessor() { return 'test'; }
}
?>

5.接下来就是配置的阶段了

在Config/app.php里面加入
1.服务提供者

给providers加入我们的TestServiceProvider 
   'providers' => [
       /*
        *  my defined 
        */
       App\Contract\TestServiceProvider::class,

   ],

2.在aliases添加别名以供调用

'aliases' => [
       'Test'  => App\Contract\TestFacade::class
   ],

6.添加完成,接下来便可以使用了

<?php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller;
use Test;
class TestController extends Controller {

    public function test(){
        Test::test('hello world');
    }

}
上一篇下一篇

猜你喜欢

热点阅读