Hyperf 初體驗-配置
- 2019 年 12 月 17 日
- 筆記
Hyperf
的配置文件全部存放在 configconfig.php
、和 configautoload
文件夾
config.php 與 autoload 文件夾內的配置文件的關係
config.php
與autoload
文件夾內的配置文件在服務啟動時都會被掃描並注入到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.php
與autoload
取得方式區別就是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({});