zoukankan      html  css  js  c++  java
  • laravel或者lumen门面和服务提供者使用

     

        关于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则说明都注册成功,接下来,我们可以在项目的任何地方使用该自定义门面啦。

    lumen方法:app里面添加

    class_alias('AppCustomFacadesFoo', 'Foo'); //添加别名

    结束语

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

  • 相关阅读:
    作业8: 软件工程学习总结
    用户体验——南通大学教务学生管理系统
    “构建之法互动游戏”感想
    第二次作业
    音乐播放器的发展演变
    C++用法的学习心得
    一、最后一次作业:软件工程学习总结
    设计一款给爸爸妈妈用的手机
    附加题1—— 我想搞懂的软工问题
    计算机病毒软件的发展演变
  • 原文地址:https://www.cnblogs.com/brady-wang/p/10678365.html
Copyright © 2011-2022 走看看