Hyperf 初體驗-配置

  • 2019 年 12 月 17 日
  • 筆記

Hyperf 的配置文件全部存放在 configconfig.php、和 configautoload 文件夾

config.php 與 autoload 文件夾內的配置文件的關係

config.phpautoload 文件夾內的配置文件在服務啟動時都會被掃描並注入到 HyperfContractConfigInterface 對應的對象中,配置的結構為一個鍵值對的大數組,兩種配置形式不同的在於 autoload 內配置文件的文件名會作為第一層 鍵(Key) 存在,而 config.php 內的則以您定義的為第一層

獲取配置

通過依賴注入獲取配置
<?php    declare(strict_types=1);    namespace AppController;    use HyperfContractConfigInterface;  use HyperfDiAnnotationInject;  use HyperfHttpServerAnnotationController;  use HyperfHttpServerAnnotationGetMapping;  use HyperfHttpServerContractRequestInterface;  use HyperfHttpServerContractResponseInterface;    /**   * @Controller()   * Class AuthController   * @package AppController   */  class AuthController  {      /**       * @Inject()       * @var ConfigInterface       */      private $config;        /**       * @GetMapping(path="index")       * @param RequestInterface $request       * @param ResponseInterface $response       * @return mixed       */      public function index(RequestInterface $request, ResponseInterface $response)      {          //獲取 config.php 里的內容          $this->config->get('app_name','');            // 獲取 autoload/databases.php 里的配置          $this->config->get('databases.default','');      }  }

config.phpautoload 取得方式區別就是 autoload 里的內容需要加上文件名

通過註解 @Value() 獲取配置
<?php    declare(strict_types=1);    namespace AppController;    use HyperfConfigAnnotationValue;  use HyperfHttpServerAnnotationController;  use HyperfHttpServerAnnotationGetMapping;  use HyperfHttpServerContractRequestInterface;  use HyperfHttpServerContractResponseInterface;    /**   * @Controller()   * Class AuthController   * @package AppController   */  class AuthController  {      /**       * @Value("databases.default.driver")       */      private $config;        /**       * @GetMapping(path="index")       * @param RequestInterface $request       * @param ResponseInterface $response       * @return mixed       */      public function index(RequestInterface $request, ResponseInterface $response)      {          // 獲取 autoload/databases.php 里的配置          return $this->config;      }  }
通過 config() 函數獲取配置
<?php    declare(strict_types=1);    namespace AppController;    use HyperfHttpServerAnnotationController;  use HyperfHttpServerAnnotationGetMapping;  use HyperfHttpServerContractRequestInterface;  use HyperfHttpServerContractResponseInterface;    /**   * @Controller()   * Class AuthController   * @package AppController   */  class AuthController  {      /**       * @GetMapping(path="index")       * @param RequestInterface $request       * @param ResponseInterface $response       * @return mixed       */      public function index(RequestInterface $request, ResponseInterface $response)      {          // 獲取 autoload/databases.php 里的配置          return config('databases.default.driver','');      }  }

注意當使用 @Value() 註解獲取配置文件時,記住是 雙引號,而不是 單引號,單引號將獲取不到內容,會報錯。正確的用法如下:

 /**   * @Value("databases.default.driver")   */  private $config;

錯誤的用法:

 /**   * @Value('databases.default.driver')   */  private $config;

其實有一些敏感內容我們可以設置環境變量 將其保存在 .env 文件中.然後我們通過 env() 函數來獲取值

env('APP_NAME', 'Hyperf Skeleton'),

關於配置文件就先說到這裡,詳細用法參考 官方文檔

(adsbygoogle = window.adsbygoogle || []).push({});