美文网首页
Laravel实践-创建自定义Facade(Contract、S

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

作者: HBLong | 来源:发表于2016-08-26 19:54 被阅读981次

    做项目时需要用到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');
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Laravel实践-创建自定义Facade(Contract、S

          本文链接:https://www.haomeiwen.com/subject/uhuzsttx.html