Laravel/Loumen最適化パッケージ-注記注入ルーティング自動構成


背景

  • 大量のルーティング構成情報のため、異なる期間の複数の人員が開発し、git衝突
  • をもたらした.
  • ルーティング情報が多すぎてメンテナンスが困難になる
  • .

    インストール

    composer require qklin/laravel-auto-router

    ミドルウェアとプロバイダの登録


    インストールパッケージにはいくつかのdemoバージョンのMiddlewareが含まれています.
    # add autorouter middleware
    $app->routeMiddleware([
        //...
    
        'check_sign'   => \Qikl\AutoRouter\Middleware\CheckSignMiddleware::class,
        // ... more
    ]);
    
    # add provider
    $app->register(Qklin\AutoRouter\AppServiceProvider::class);

    env

    AUTO_ROUTER_MODULE_DIR=Modules
    LARAVEL_ORIGIN_HTTP_PREFIX=h
    AUTOROUTER_MODULE_HTTP_PREFIX=m,inside
    AUTOROUTER_DEFAULT_MIDDLEWARE=token
    AUTOROUTER_PROVIDER_START=1
    AUTOROUTER_MIDDLEWARE_SUFFIX=OLNVIX
    
    # middleware
    AR_INSIDE_HOSTS=www.baidu.com,www.google.com
    AR_CHECK_SIGN_TIMEOUT=30
    AR_CHECK_SIGN_KEY=sdfsdfdf
    AR_AUTH_API_DOMAIN=http://auth.baidu.com/checkauth
    AR_API_THROTTLE=ar_api_throttle
    
    # document variable
    AR_DOCUMENT_ROUTER=arRouter
    AR_DOCUMENT_METHOD=arMethod
    AR_DOCUMENT_ONLY_INSIDE=arOnlyInside

    使用


    互換性はroute.phpで構成されたルーティング

    現在サポートされている注記


    デフォルトは上の定義名で説明します
  • arRouter:接尾辞制御ミドルウェア
  • を直接構成可能
  • arMethod: POST|GET|PUT|...
  • arOnlyInisde:ルーティングにはinside先頭
  • が必要です.

    ルート自動注入使用

  • apiはenvコンフィギュレーション(AUTROUTER_MODULE_HTTP_PREFIX)プレフィックスを必要とします.
  • パスには、アルパカディレクトリが含まれています.区切る.like:HotKeys => hot_keys
  • メソッドは【.】を含むの目次は区切る.like:V1.0 => v1_0
  • 方法は、アルパカを【−】で区切ることを含む.like:getListsO => get-list-o

  • コントローラメソッド注釈の構成例の追加

        ,            :app/Modules/Module/Hotkeys/V1.0/Controllers/IndexController.php
      :getList,  arRouter getListO
      :/m/module/hot-keys/v1_0/index/get-list-o
    
    /**
     *          
     *   :/m/module/articles/college/detail
     * @arRouter
     * @return string
     */
    public function detail()
    {
    }
     
    /**
     *    :             
     *   :/m/module/articles/college/detail-o
     * @arRouter detailO
     * @return string
     */
    public function detail()
    {
    }
     
     
    /**
     *    :               
     *   ,     inside  :/inside/module/articles/college/detail-o
     *    post get    
     * @arRouter detailO
     * @arMehtod POST|GET
     * @arOnlyInside
     * @return string
     */
    public function detail()
    {
    }
    

    注記構成の説明

  • O:Operate操作自動注入絞りミドルウェア
  • L:Lookビュー自動削除スロットルミドルウェア[存在する場合]
  • I:Insideイントラネットは自動的にイントラネットミドルウェアを注入し、最前線に配置する(存在しない場合)、tokenミドルウェア
  • を自動的に除去する.
  • N:NotAuthは許可を必要とせず、apiを公開し、tokenミドルウェアを自動的に除去する[存在する場合]
  • V:validateは検証を要求し、要求検証ミドルウェアを自動的に除去する[存在しない場合]
  • X:checkSignリクエストチェック
  • が存在しない場合、デフォルトはroute.php構成走
  • 構成route.conf

    
    //     :app/config/route.php
    //           ,      
    return [
        "middleware" => [  //   ,     
            "controllers" => [ //         =>    
                "m/module/ctl/action" => ["token", "validate"],
            ],
            "actions"     => [ //       =>    
            ]
        ]
    ];
    

    Laravelバージョン


    アプリケーションにconfigureメソッドを注入する必要があります
    /**
     *       
     * @param $name
     */
    public function configure($name)
    {
        if (isset($this->loadedConfigurations[$name])) {
            return;
        }
    
        $this->loadedConfigurations[$name] = true;
    
        $path = $this->getConfigurationPath($name);
    
        if ($path && is_file($path)) {
            $this->make('config')->set($name, require $path);
        }
    }
    
    /**
     *       
     * @param null $name
     * @return string
     */
    public function getConfigurationPath($name = null)
    {
        if (!$name) {
            $appConfigDir = $this->basePath('config') . '/';
    
            if (file_exists($appConfigDir)) {
                return $appConfigDir;
            } else if (file_exists($path = __DIR__ . '/../config/')) {
                return $path;
            }
        } else {
            $appConfigPath = $this->basePath('config') . '/' . $name . '.php';
    
            if (file_exists($appConfigPath)) {
                return $appConfigPath;
            } else if (file_exists($path = __DIR__ . '/../config/' . $name . '.php')) {
                return $path;
            }
        }
    }