• 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'
  • 相关阅读:
    fill & stroke
    UIView 中 hidden、alpha、clear color 与 opaque 的区别
    图像处理之_仿射变换与透视变换
    GPU性能:光栅化、图层混合、离屏渲染
    PHP开发api接口安全验证的实例,值得一看
    svn钩子(hooks)自动部署代码到web目录
    linux安装配置SVN并设置钩子
    使用Navicat for MySQL把本地数据库上传到服务器
    svn upgrade
    QQ分享 QQ空间分享 API链接:
  • 原文地址:https://www.cnblogs.com/brady-wang/p/10537497.html
Copyright © 2020-2023  润新知