8

In Drupal 8, how create a content programmatically ? From the "Drupal 8" administration, I created a new type "House" (contain a description, an image, a reference field to users ...). How can I create a entity type "House" from a custom module ?

In my custom module, I have a form file (contain a class who extends FormBase). In the submit callback, I want create a new "house" and set values and save the new Entity.

I don't find example on the web , in the core source...

  • Your second question "How can I create a entity type 'House'?" is a little confusing. I think the question is "How can I create a node of the node type "House" from a custom module?" The ambiguity stems from the use of "entity type" which has a very specific meaning in Drupal and the question could be "How can I create a custom entity type called 'House' from a custom module?" or "How can I create a custom entity which uses the bundle 'House'"? – mradcliffe Nov 5 '15 at 14:13
11

Here's a simple example of creating a node in Drupal 8.

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

Updated to remove deprecated function as per comments from @mradcliffe. Thanks!

FYI, for testing out little snippets of code like this, the drush core-cli command works great. See: http://www.drushcommands.com/drush-7x/core/core-cli

  • 2
    entity_create() is a deprecated method that we should avoid using. Injecting the EntityManager into the Form class or using \Drupal::entityManager are the standard ways of managing entities. – mradcliffe Nov 5 '15 at 18:35
  • 1
    Before the save, with the entityManager, is it possible to know for each field : what type of data must be set ? (text for text field, fid for file etc...) – user2137454 Nov 5 '15 at 20:18
  • The only way I know at the moment is to use another deprecated method, EntityManager::getDefinitions(), but I think if you instantiate an EntityDataDefinition via the static create method you can call getPropertyDefinitions(). Both will return definitions for each property such as title or a field. There is also the getFieldStorageDefinitions() which returns the same thing, but from storage entity (see getStorage('node') above). However this may not be available for non-SQL drivers. – mradcliffe Nov 5 '15 at 20:46
0

As of Drupal 8 nodes are now treated as entities. You can simple create a node by the following code

$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();
  • 1
    entity_create() is a deprecated method that we should avoid using. Injecting the EntityManager into the Form class or using \Drupal::entityManager are the standard ways of managing entities. – mradcliffe Nov 5 '15 at 18:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.