trait BlockCreationTrait

Same name in other branches
  1. 9 core/modules/block/tests/src/Traits/BlockCreationTrait.php \Drupal\Tests\block\Traits\BlockCreationTrait
  2. 8.9.x core/modules/simpletest/src/BlockCreationTrait.php \Drupal\simpletest\BlockCreationTrait
  3. 8.9.x core/modules/block/tests/src/Traits/BlockCreationTrait.php \Drupal\Tests\block\Traits\BlockCreationTrait
  4. 11.x core/modules/block/tests/src/Traits/BlockCreationTrait.php \Drupal\Tests\block\Traits\BlockCreationTrait

Provides methods to create and place block with default settings.

This trait is meant to be used only by test classes.

Hierarchy

12 files declare their use of BlockCreationTrait
AreaEntityTest.php in core/modules/views/tests/src/Kernel/Handler/AreaEntityTest.php
AreaOrderTest.php in core/modules/views/tests/src/Kernel/Handler/AreaOrderTest.php
BlockContentDeletionTest.php in core/modules/block_content/tests/src/Kernel/BlockContentDeletionTest.php
BlockRebuildTest.php in core/modules/block/tests/src/Kernel/BlockRebuildTest.php
Breadcrumb404Test.php in core/tests/Drupal/FunctionalTests/Breadcrumb/Breadcrumb404Test.php

... See full list

File

core/modules/block/tests/src/Traits/BlockCreationTrait.php, line 14

Namespace

Drupal\Tests\block\Traits
View source
trait BlockCreationTrait {
    
    /**
     * Creates a block instance based on default settings.
     *
     * @param string $plugin_id
     *   The plugin ID of the block type for this block instance.
     * @param array $settings
     *   (optional) An associative array of settings for the block entity.
     *   Override the defaults by specifying the key and value in the array, for
     *   example:
     *   @code
     *     $this->drupalPlaceBlock('system_powered_by_block', [
     *       'label' => t('Hello, world!'),
     *     ]);
     *   @endcode
     *   The following defaults are provided:
     *   - label: Random string.
     *   - id: Random string.
     *   - region: 'sidebar_first'.
     *   - theme: The default theme.
     *   - visibility: Empty array.
     *
     * @return \Drupal\block\Entity\Block
     *   The block entity.
     *
     * @todo Add support for creating content block instances.
     */
    protected function placeBlock($plugin_id, array $settings = []) {
        $config = \Drupal::configFactory();
        $settings += [
            'plugin' => $plugin_id,
            'region' => 'content',
            'id' => $this->randomMachineName(8),
            'theme' => $config->get('system.theme')
                ->get('default'),
            'label' => $this->randomMachineName(8),
            'visibility' => [],
            'weight' => 0,
        ];
        $values = [];
        foreach ([
            'region',
            'id',
            'theme',
            'plugin',
            'weight',
            'visibility',
        ] as $key) {
            $values[$key] = $settings[$key];
            // Remove extra values that do not belong in the settings array.
            unset($settings[$key]);
        }
        foreach ($values['visibility'] as $id => $visibility) {
            $values['visibility'][$id]['id'] = $id;
        }
        $values['settings'] = $settings;
        $block = Block::create($values);
        $block->save();
        return $block;
    }

}

Members

Title Sort descending Modifiers Object type Summary
BlockCreationTrait::placeBlock protected function Creates a block instance based on default settings.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.