Drupal 8 variable_get


9

我在Drupal 7中有一些代码正在使用variable_get。现在,我想用Drupal 8编写代码。因此,我正在阅读本文,但对我没有太大帮助。

如何从Drupal 7中的代码在Drupal 8中编写此代码?

$types = array_values(variable_get('test_content_types', array()));

或这个

'#default_value' => variable_get('test_content_types', array()),

一些建议。

Answers:


16

在Drupal 7中

 $data =  variable_get('test_content_types');

在Drupal 8中

 $data = \Drupal::state()->get('test_content_types'); 

有关“获取”,“设置”,“删除”的更多信息,请访问- 步骤5:如何将D7变量升级到D8的状态系统


谢谢@ darol100 ..链接很好..现在我明白了。所以我可以写$ data = \ Drupal :: state()-> get('test_content_types',array());
SakaSerbia '16

7
请注意,在D8中,状态和配置之间存在差异。如在drupal.org/developing/api/8/configuration上所述:“配置是用于存储要从开发到生产同步的信息的位置。该信息通常是在网站构建期间创建的,通常不由常规用户生成在正常站点操作期间。您应该使用State API(而不是配置)来存储不应在实例之间传递的局部变量。对于隐藏的系统值,以及如果您永远不想在环境之间进行部署,请使用state。”
marcvangend

5

接受的答案是答案的一半。正如marcvangend所指出的那样,Drupal 8中有两个选项用于存储过去存储在变量表中的内容,以及使用variable_set()和存储和检索的内容variable_get()。在darol100的答案中记录的第一个是State API

第二个是配置API,在拥有配置表的大多数情况下应使用。例如,它至少在您的模块中需要配置安装文件config/install/example.settings.yml。对于单个配置(具有多个潜在值),该文件可能仅包含例如:

test_content_types: - article

然后将值用于:

$types = \Drupal::config('example.settings')->get('test_content_types');

或使用以下方法更改存储的值:

\Drupal::service('config.factory')
  ->getEditable('example.settings')
  ->set('test_content_types', ['article', 'page'])
  ->save();

另请参阅Drupal 8文档以获取D7到D8的配置升级以及在模块中使用配置


1
对我来说,这是对这个问题的正确答案。我目前正在从Drupal 7过渡,这对我有很大帮助。
盖特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.