Приведенный выше пример достаточно близок, но все еще не верен. Идея состоит в том, что вы должны придумать свой собственный идентификатор экземпляра блока (в моем случае devel_execute_php_1112 (возможно, потому что я пытался заставить его работать 1112 раз, он останется загадкой)), а затем фактический идентификатор блока (тот, который объявляется для пользовательских блоков в аннотации) и темы. Тогда просто установите регион, и все готово. Создан экземпляр блока в нужном регионе.
$blockEntityManager = \Drupal::service('entity.manager')->getStorage('block');
$block = $blockEntityManager->create(
array(
'id'=> 'devel_execute_php_1112',
'plugin' => 'devel_execute_php',
'theme' => 'seven'
)
);
$block->setRegion('content');
$block->save();
edit1: я на самом деле позже проверил комментарий выше - и это правильно. Просто не ясно, что id - это то, что вы должны придумать. В качестве погашения за мой отстойный комментарий я опубликую решение о том, как создать экземпляр блока пользовательской сущности блока:
$blockEntityManager = \Drupal::service('entity.manager')->getStorage('block');
$block = $blockEntityManager->create(
array(
'id'=> 'ggggggggsssssss',
'plugin' => 'block_content:79d53b4e-9e60-4f97-befc-101da919bb7a',
'theme' => 'visitb_he_theme'
)
);
$block->setRegion('content');
в основном то же самое, но для плагина вы пишете block_content: uuid_of_custom_block_entity_instance