Hyperf
的配置文件全部存放在 config\config.php
黍判、和 config\autoload
文件夾
config.php 與 autoload 文件夾內(nèi)的配置文件的關(guān)系
config.php
與autoload
文件夾內(nèi)的配置文件在服務(wù)啟動時都會被掃描并注入到Hyperf\Contract\ConfigInterface
對應(yīng)的對象中,配置的結(jié)構(gòu)為一個鍵值對的大數(shù)組掀亩,兩種配置形式不同的在于autoload
內(nèi)配置文件的文件名會作為第一層 鍵 (Key) 存在芹啥,而config.php
內(nèi)的則以您定義的為第一層
獲取配置
通過依賴注入獲取配置
<?php
declare(strict_types=1);
namespace App\Controller;
use Hyperf\Contract\ConfigInterface;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
/**
* @Controller()
* Class AuthController
* @package App\Controller
*/
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 里的內(nèi)容
$this->config->get('app_name','');
// 獲取 autoload/databases.php 里的配置
$this->config->get('databases.default','');
}
}
config.php
與autoload
取得方式區(qū)別就是autoload
里的內(nèi)容需要加上文件名
通過注解 @Value()
獲取配置
<?php
declare(strict_types=1);
namespace App\Controller;
use Hyperf\Config\Annotation\Value;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
/**
* @Controller()
* Class AuthController
* @package App\Controller
*/
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()
函數(shù)獲取配置
<?php
declare(strict_types=1);
namespace App\Controller;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
/**
* @Controller()
* Class AuthController
* @package App\Controller
*/
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','');
}
}
注意當(dāng)使用
@Value()
注解獲取配置文件時锻离,記住是雙引號
, 而不是單引號
, 單引號將獲取不到內(nèi)容铺峭,會報錯。正確的用法如下:
/**
* @Value("databases.default.driver")
*/
private $config;
錯誤的用法:
/**
* @Value('databases.default.driver')
*/
private $config;
其實有一些敏感內(nèi)容我們可以設(shè)置環(huán)境變量 將其保存在 .env
文件中汽纠。然后我們通過 env()
函數(shù)來獲取值
env('APP_NAME', 'Hyperf Skeleton'),
關(guān)于配置文件就先說到這里卫键,詳細用法參考 官方文檔。