zoukankan      html  css  js  c++  java
  • Laravel5 创建自定义门面(Facade)

     

    门面为应用服务容器中的绑定类提供了一个“静态”接口。Laravel 内置了很多门面,你可能在不知道的情况下正在使用它们。Laravel 的门面作为服务容器中底层类的“静态代理”,相比于传统静态方法,在维护时能够提供更加易于测试、更加灵活、简明优雅的语法。所谓门面就是 Facade 类利用了 __callStatic() 魔术方法来延迟调用容器中的对象的方法

    接下来使用 Laravel 编写一个自定义门面


    首先创建一个需要绑定到服务容器的 TokenManageService 类

    declare(strict_types=0);
    
    /**
     * app/Services/TokenMangeService.php
     *
     */
    namespace AppServices;
    
    /**
     * Token管理服务
     *
     * Class TokenManageService
     * @package AppServices
     */
    class TokenManageService
    {
        /**
         * 定义token属性
         *
         * @var
         */
        public $token;
    
        /**
         * 定义token属性
         *
         * @param $token
         * @return mixed
         */
        public function getToken($token)
        {
            return $this->token = $token;
        }
    }

    创建一个静态指向 TokenManage 类的门面类 TokenManageFacade

    declare(strict_types=0);
    
    /**
     * app/Facades/TokenManageFacade.php
     *
     */
    namespace AppFacades;
    
    use IlluminateSupportFacadesFacade;
    
    /**
     * Class TokenManageFacade
     * @package AppFacades
     */
    class TokenManageFacade extends Facade
    {
        /**
         * Get the registered name of the component.
         *
         * @return string
         */
        protected static function getFacadeAccessor()
        {
            return 'token.manage';
        }
    }

    在服务提供者中绑定 TokenManageService 类到服务容器

    declare(strict_types=0);
    
    /**
     * app/Providers/TokenManageServiceProvider.php
     *
     */
    namespace AppProviders;
    
    use AppServicesTokenManageService;
    
    use IlluminateSupportServiceProvider;
    
    /**
     * token管理服务提供者
     *
     * Class TokenManageServiceProvider
     * @package AppProviders
     */
    class TokenManageServiceProvider extends ServiceProvider
    {
    
        /**
         * Define your route model bindings, pattern filters, etc.
         *
         * @return void
         */
        public function boot()
        {
        }
    
        /**
         * Register the application services.
         *
         * @return void
         */
        public function register()
        {
            $this->app->singleton('token.manage', function ($app) {
                return new TokenManageService();
            });
        }
    }

    修改配置文件 config/app.php

    return [
        'providers' => [
            ...
            /**
             * 自定义
             */
            AppProvidersTokenManageServiceProvider::class
        ],
        'aliases' => [
            ...
            /**
             * 自定义
             */
            'TokenManage' => AppFacadesTokenManageFacade::class
        ],
    ]

    接下来就可以测试了

    declare(strict_types=0);
    
    /**
     * TestController.php.
     *
     */
    namespace AppHttpControllersTest;
    
    use TokenManage;
    
    /**
     * Class TestController
     * @package AppHttpControllersTest
     */
    class TestController extends Controller
    {
        /**
         * 测试自定义门面
         */
        public function testFacade()
        {
            $res = TokenManage::getToken('Hello World');
            dd($res);
        }
    }

    Response

    Class 'TokenManage' Not Found
    • 1
    • WTF,当时心里一万只草泥马奔腾着,why…why…why…

    • 没办法啦,只能定位问题了,默默地找了定位了半个多小时,终于发现了问题所在,原来是 Laravel 的配置文件有缓存没有更新到。

    php artisan config:cache
    • 1

    重新测试一下,果然成功了。

    Response

    'Hello World'
  • 相关阅读:
    mysql面试知识点
    计算机网络
    BFS
    拓扑排序
    双指针
    回溯算法
    hash表 算法模板和相关题目
    桶排序及其应用
    滑动窗口
    贪心算法
  • 原文地址:https://www.cnblogs.com/brady-wang/p/10537497.html
Copyright © 2011-2022 走看看