Hyperf
的配置文件全部存放在 config\config.php
、和 config\autoload
文件夹
config.php 与 autoload 文件夹内的配置文件的关系
config.php
与autoload
文件夹内的配置文件在服务启动时都会被扫描并注入到Hyperf\Contract\ConfigInterface
对应的对象中,配置的结构为一个键值对的大数组,两种配置形式不同的在于autoload
内配置文件的文件名会作为第一层 键 (Key) 存在,而config.php
内的则以您定义的为第一层
获取配置
通过依赖注入获取配置
<?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 里的内容
$this->config->get('app_name','');
// 获取 autoload/databases.php 里的配置
$this->config->get('databases.default','');
}
}
config.php
与autoload
取得方式区别就是autoload
里的内容需要加上文件名
通过注解 @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()
函数获取配置
<?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','');
}
}
注意当使用
@Value()
注解获取配置文件时,记住是双引号
, 而不是单引号
, 单引号将获取不到内容,会报错。正确的用法如下:
/**
* @Value("databases.default.driver")
*/
private $config;
错误的用法:
/**
* @Value('databases.default.driver')
*/
private $config;
其实有一些敏感内容我们可以设置环境变量 将其保存在 .env
文件中。然后我们通过 env()
函数来获取值
env('APP_NAME', 'Hyperf Skeleton'),
关于配置文件就先说到这里,详细用法参考 官方文档。
网友评论