💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 读取配置 `Phalcon\Config` 是一个组件,用于将各种格式的配置文件(使用适配器)转换为PHP对象,以便在应用程序中使用。 可以从`Phalcon\Config`获取值,如下所示: ```php <?php use Phalcon\Config; $config = new Config( [ 'test' => [ 'parent' => [ 'property' => 1, 'property2' => 'yeah', ], ], ] ); echo $config->get('test')->get('parent')->get('property'); // displays 1 echo $config->test->parent->property; // displays 1 echo $config->path('test.parent.property'); // displays 1 ``` ## 工厂 使用`adapter`选项加载Config Adapter类,如果未提供扩展名,则将其添加到`filePath`。 ```php <?php use Phalcon\Config\Factory; $options = [ 'filePath' => 'path/config', 'adapter' => 'php', ]; $config = Factory::load($options); ``` ## 原生数组 第一个示例显示如何将本机数组转换为`Phalcon\Config`对象。此选项提供最佳性能,因为在此请求期间不读取任何文件。 ```php <?php use Phalcon\Config; $settings = [ 'database' => [ 'adapter' => 'Mysql', 'host' => 'localhost', 'username' => 'scott', 'password' => 'cheetah', 'dbname' => 'test_db' ], 'app' => [ 'controllersDir' => '../app/controllers/', 'modelsDir' => '../app/models/', 'viewsDir' => '../app/views/' ], 'mysetting' => 'the-value' ]; $config = new Config($settings); echo $config->app->controllersDir, "\n"; echo $config->database->username, "\n"; echo $config->mysetting, "\n"; ``` 如果您想更好地组织项目,可以将数组保存在另一个文件中,然后阅读它。 ```php <?php use Phalcon\Config; require 'config/config.php'; $config = new Config($settings); ``` ## File 适配器 可用的适配器是: | 类 | 描述 | | -------------------------------- | ------------------------------------------------------------------------------------------------ | | `Phalcon\Config\Adapter\Ini` | 使用INI文件存储设置。在内部,适配器使用PHP函数`parse_ini_file`。 | | `Phalcon\Config\Adapter\Json` | 使用JSON文件存储设置。 | | `Phalcon\Config\Adapter\Php` | 使用PHP多维数组来存储设置。此适配器提供最佳性能。 | | `Phalcon\Config\Adapter\Yaml` | 使用YAML文件存储设置。 | ## 读取 INI 文件 Ini文件是存储设置的常用方法。`Phalcon\Config` 使用优化的PHP函数`parse_ini_file`来读取这些文件。文件部分被解析为子设置以便于访问。 ```ini [database] adapter = Mysql host = localhost username = scott password = cheetah dbname = test_db [phalcon] controllersDir = '../app/controllers/' modelsDir = '../app/models/' viewsDir = '../app/views/' [models] metadata.adapter = 'Memory' ``` 您可以按如下方式阅读该文件: ```php <?php use Phalcon\Config\Adapter\Ini as ConfigIni; $config = new ConfigIni('path/config.ini'); echo $config->phalcon->controllersDir, "\n"; echo $config->database->username, "\n"; echo $config->models->metadata->adapter, "\n"; ``` ## 合并配置 `Phalcon\Config` 可以递归地将一个配置对象的属性合并到另一个配置对象中。添加新属性并更新现有属性。 ```php <?php use Phalcon\Config; $config = new Config( [ 'database' => [ 'host' => 'localhost', 'dbname' => 'test_db', ], 'debug' => 1, ] ); $config2 = new Config( [ 'database' => [ 'dbname' => 'production_db', 'username' => 'scott', 'password' => 'secret', ], 'logging' => 1, ] ); $config->merge($config2); print_r($config); ``` 上面的代码产生以下内容: ```bash Phalcon\Config Object ( [database] => Phalcon\Config Object ( [host] => localhost [dbname] => production_db [username] => scott [password] => secret ) [debug] => 1 [logging] => 1 ) ``` [Phalcon Incubator](https://github.com/phalcon/incubator)中有更多适用于此组件的适配器。 ## 嵌套配置 您可以使用`Phalcon\Config::path` 方法轻松访问嵌套配置值。该方法允许获得值,而不关心路径的某些部分不存在的事实。我们来看一个例子: ```php <?php use Phalcon\Config; $config = new Config( [ 'phalcon' => [ 'baseuri' => '/phalcon/' ], 'models' => [ 'metadata' => 'memory' ], 'database' => [ 'adapter' => 'mysql', 'host' => 'localhost', 'username' => 'user', 'password' => 'passwd', 'name' => 'demo' ], 'test' => [ 'parent' => [ 'property' => 1, 'property2' => 'yeah' ], ], ] ); // 使用点作为分隔符 $config->path('test.parent.property2'); // yeah $config->path('database.host', null, '.'); // localhost $config->path('test.parent'); // Phalcon\Config // 使用斜杠作为分隔符。 还可以指定默认值,如果配置选项不存在,将返回默认值。 $config->path('test/parent/property3', 'no', '/'); // no Config::setPathDelimiter('/'); $config->path('test/parent/property2'); // yeah ``` 以下示例显示如何创建有用的Facade以访问嵌套配置值: ```php <?php use Phalcon\Di; use Phalcon\Config; /** * @return mixed|Config */ function config() { $args = func_get_args(); $config = Di::getDefault()->getShared(__FUNCTION__); if (empty($args)) { return $config; } return call_user_func_array([$config, 'path'], $args); } ``` ## 注入配置依赖性 您可以将配置注入控制器,允许我们在`Phalcon\Mvc\Controller`中使用`Phalcon\Config`。为此,您必须将其作为服务添加到Dependency Injector容器中。在引导程序文件中添加以下代码: ```php <?php use Phalcon\Di\FactoryDefault; use Phalcon\Config; // Create a DI $di = new FactoryDefault(); $di->set( 'config', function () { $configData = require 'config/config.php'; return new Config($configData); } ); ``` 现在在您的控制器中,您可以使用名称`config`使用依赖注入功能来访问您的配置,如下面的代码: ```php <?php use Phalcon\Mvc\Controller; class MyController extends Controller { private function getDatabaseName() { return $this->config->database->dbname; } } ```