以编程方式创建内容


9

在Drupal 8中,如何以编程方式创建内容?从“ Drupal 8”管理中,我创建了一个新的“ House”类型(包含说明,图像,用户的参考字段...)。如何从自定义模块创建实体类型“房屋”?

在我的自定义模块中,我有一个表单文件(包含一个扩展FormBase的类)。在提交回调中,我想创建一个新的“房子”并设置值并保存新的实体。

我在网上找不到核心的示例...


您的第二个问题“如何创建实体类型“房屋”?” 有点令人困惑。我认为问题是“如何通过自定义模块创建节点类型为“ House”的节点?歧义源于“实体类型”的使用,它在Drupal中具有非常特殊的含义,问题可能是“如何从自定义模块中创建称为“房屋”的自定义实体类型?或“如何创建使用捆绑包“房屋”的自定义实体”?
mradcliffe 2015年

Answers:


15

这是在Drupal 8中创建节点的简单示例。

$data = [
  'type' => 'article', 
  'title' => 'My new title', 
  'uid' => 1
];
$node = Drupal::entityTypeManager()
  ->getStorage('node')
  ->create($data);
$node->save();

根据@mradcliffe的注释进行了更新以删除不推荐使用的功能。谢谢!

仅供参考,对于测试这样的小片段代码,该drush core-cli命令非常有用。请参阅:http : //www.drushcommands.com/drush-7x/core/core-cli


1
在保存之前,可以使用entityManager了解每个字段:必须设置什么类型的数据?(用于文本字段的文本,用于文件的fid等...)
matthieu lopez 2015年

目前,我知道的唯一方法是使用另一个不赞成使用的方法EntityManager :: getDefinitions(),但是我认为,如果您通过静态create方法实例化EntityDataDefinition,则可以调用getPropertyDefinitions()。两者都将返回每个属性的定义,例如标题或字段。还有一个getFieldStorageDefinitions(),它从存储实体返回相同的内容(请参见上面的getStorage('node'))。但是,这可能不适用于非SQL驱动程序。
mradcliffe 2015年

0

从Drupal开始,现在将8个节点视为实体。您可以通过以下代码简单地创建节点

$new_page_values = array();
$new_page_values['type'] = 'my_content_type';
$new_page_values['title'] = $form_state['values']['page_title'];
$new_page_values['path'] = $new_page_path;

$new_page = entity_create('node', $new_page_values);
$new_page->save();

2
entity_create()是已弃用的方法,我们应避免使用。将EntityManager注入Form类或使用\ Drupal :: entityManager是管理实体的标准方法。
mradcliffe
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.