9.6 配置API

1、读取配置

// Immutable Config (Read Only)
$config = \Drupal::config('system.performance');
// Mutable Config (Read / Write)
$config = \Drupal::service('config.factory')->getEditable('system.performance');

第一个只读,第二个方法可读写。

配置读取一般使用get方法。如:

$config = \Drupal::config('system.maintenance');
$message = $config->get('message');

也可以改为链式写法:

$message = \Drupal::config('system.maintenance')->get('message');

读取一个嵌套配置,使用.号连接起来。如:

$enabled = \Drupal::config('system.performance')->get('cache.page.enabled');

2、写入配置

通常使用getEditable这个方法从\Drupal\Core\Config\Config中获取。 如:

\Drupal::service('config.factory')->getEditable('system.performance');

覆写单个配置

一般使用set和save方法来变更配置。如:

$config = \Drupal::service('config.factory')->getEditable('system.performance');

// Set a scalar value.
$config->set('cache.page.enabled', 1);

// Set an array of values.
$page_cache_data = array('enabled' => 1, 'max_age' => 5);
$config->set('cache.page', $page_cache_data);

// Save your data to the file system.
$config->save();

也可以写成链式:

\Drupal::service('config.factory')->getEditable('system.performance')->set('cache.page.enabled', 1)->save();

覆写所有配置

如果要覆盖所有的配置数据,可以使用setData方法,代码如下:

// Set all values.
\Drupal::service('config.factory')->getEditable('system.performance')->setData(array(
    'cache' => array(
      'page' => array(
        'enabled' => '0',
        'max_age' => '0',
      ),
    ),
    'preprocess' => array(
      'css' => '0',
      'js' => '0',
    ),
    'response' => array(
      'gzip' => '0',
    ),
  ))
  ->save();

注意:setData会完全改变配置数据结构,务必更改的时候对应好键值。

3、删除配置

删除一个单独的配置

代码如下:

$config = \Drupal::service('config.factory')->getEditable('system.performance');
$config->clear('cache.page.max_age')->save();
$page_cache_data = $config->get('cache.page');

这时候打印$page_cache_data,会发现max_age已经被删除了。

删除所有配置

通常使用delete方法,代码如下:

\Drupal::service('config.factory')->getEditable('system.performance')->delete();

4、最佳实践

如果要在一个配置里保存多个字段,我们可能要写多个save,如下:

\Drupal::service('config.factory')->getEditable('foo.bar')->set('foo', 'foo')->save();
\Drupal::service('config.factory')->getEditable('foo.bar')->set('bar', 'bar')->save();

这种代码是不合理的,应该主要来写:

$config = \Drupal::service('config.factory')->getEditable('foo.bar');
$config
  ->set('foo', 'foo')
  ->set('bar', 'bar')
  ->save();

本书共79小节。


评论 (0)