laravel门面和服务提供者使用

 

    关于laravel门面和服务提供者使用的一点看法,门面之词,不足之处,还请多多指教。

    在laravel中,咱们可能须要用到本身添加的类时,能够创建一个文件夹专门存放类文件,也能够使用laravel的服务提供者的方式来使用。php

    这二者其实区别不大,主要是前者使用的话,会跟业务代码产生依赖,想象一下,若是一个控制器之中引用了不少自定义的类文件的话,那么能够想像会产生多少依赖,因此咱们能够使用服务提供者的方式,向laravel的容器内注册类,这样的话,就可以在一个单独的配置文件里面来管理依赖,逻辑和后期维护也会方便很多。nginx

    使用门面主要是能够不须要去实例化类,能够使用静态方法的方式去访问类的方法,用起来也比较方便,不过这样其实也有缺点,好比不可以直接跳转到对应的方法内部,也不能直观的去了解这个方法的用法,我的开发可能影响不大,不过若是团队开发的,其实用起来可能会让人有点晕晕的吧。laravel

    好了,话很少说,仍是用代码来讲话吧。ruby

此代码是创建在laravel5.3的基础上markdown

1、创建一个须要用到类

app目录下面见一个lib\Tools\FooBar.php文件,这是咱们的工具类,里面是咱们定义的代码。app

<?php namespace App\Lib\Tools; class FooBar { public function get() { return 'hello facade'; } }

2、创建一个服务提供者

使用php artisan make:provider FooServiceProvider建立一个服务提供者,并将咱们刚才编写的工具类注册到容器里面,ide

<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Lib\Tools\FooBar; class FooServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { $this->app->bind('foo',function(){ return new FooBar(); }); } } 

若是须要慢加载的话,则须要添加在改服务提供者中添加一个$defer属性。并定义一个provides方法。以下所示:工具

protected $defer = true; public function provides() { return [FooBar::class]; }

3、注册服务提供者

config\app.php文件中的providers属性里面注册咱们刚添加的服务提供者,以下所示:post

/* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\FooServiceProvider::class,

这样咱们就能够在项目中的任何地方使用咱们刚才定义的工具类,能够直接在某个类的方法里面注入,而后就能够直接调用了。若是想要使用门面的话,能够往下看。测试

4、建立一个门面类

app目录下面建立一个门面类,App\CustomFacades\Foo.php,目录这里是我本身创建的,这个能够随便建立。只要在后面注册的时候一致就能够。代码以下:

<?php namespace App\CustomFacades; use Illuminate\Support\Facades\Facade; class Foo extends Facade { protected static function getFacadeAccessor() { return 'foo'; } }

5、注册门面

config\app.phpaliases属性中追加下面的代码:

'Foo' => App\CustomFacades\Foo::class,

以上步骤就注册完成了,咱们能够调用测试一下是否可用。
routes\console.php里面添加下面的代码:

Artisan::command('testFacade',function(){ dd(Foo::get()); });

而后在项目根目录的终端里面,调用下面的命令:

php artisan testFacade

若是输出 hello facade则说明都注册成功,接下来,咱们能够在项目的任何地方使用该自定义门面啦。

结束语

本篇文章主要介绍了怎么在laravel中使用自定义的服务提供者和门面类,基本上都是参照的官方文档,若是有什么错误或者其余的地方,还望各位多指点指点。

相关文章
相关标签/搜索