laravel门面和服务提供者使用(示例代码)

栏目: php · 发布时间: 2021-05-07

来源: brady-wang

作者:brady-wang

简介  这篇文章主要介绍了laravel门面和服务提供者使用(示例代码)以及相关的经验技巧,文章约7570字,浏览量595,点赞数4,值得参考!

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

    在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用laravel的服务提供者的方式来使用。

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

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

    好了,话不多说,还是用代码来说话吧。

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

一、建立一个需要用到类

app目录下面见一个libToolsFooBar.php文件,这是我们的工具类,里面是我们定义的代码。

<?php
namespace AppLibTools;

class FooBar
{
    public function get()
    {
        return ‘hello facade‘;
    }
}

二、建立一个服务提供者

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

<?php

namespace AppProviders;

use IlluminateSupportServiceProvider;
use AppLibToolsFooBar;

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];
}

三、注册服务提供者

configapp.php文件中的providers属性里面注册我们刚添加的服务提供者,如下所示:

/*
* Application Service Providers...
*/
AppProvidersAppServiceProvider::class,
AppProvidersAuthServiceProvider::class,
// AppProvidersBroadcastServiceProvider::class,
AppProvidersEventServiceProvider::class,
AppProvidersRouteServiceProvider::class,
AppProvidersFooServiceProvider::class,

这样我们就可以在项目中的任何地方使用我们刚才定义的工具类,可以直接在某个类的方法里面注入,然后就可以直接调用了。如果想要使用门面的话,可以往下看。

四、创建一个门面类

app目录下面创建一个门面类,AppCustomFacadesFoo.php,目录这里是我自己建立的,这个可以随便创建。只要在后面注册的时候一致就可以。代码如下:

<?php

namespace AppCustomFacades;

use IlluminateSupportFacadesFacade;

class Foo extends Facade
{
    protected static function getFacadeAccessor()
    {
        return ‘foo‘;
    }
}

五、注册门面

configapp.phpaliases属性中追加下面的代码:

 ‘Foo‘ => AppCustomFacadesFoo::class,

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

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

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

php artisan testFacade

如果输出 hello facade则说明都注册成功,接下来,我们可以在项目的任何地方使用该自定义门面啦。

结束语

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

 

 
 

以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文地址:https://www.cnblogs.com/php-linux/p/11638621.html

laravel 门面(示例代码)

Laravel 核心--Facades 门面(示例代码)

laravel5.5门面(示例代码)

PHP重载以及Laravel门面Facade(示例代码)

Laravel之大纲(示例代码)

Laravel 控制反转和门面模式概念详解(示例代码)

laravel 应用层执行过程源码分析

Laravel框架下路由的使用(源码解析)