Drupal 8 - 自定义块未在控制器中呈现
Drupal 8 - Custom block is not rendering in controller
我创建了一个自定义块,并试图将其加载到控制器中以最终在树枝模板中呈现。我知道块代码有效,因为我可以使用块 ui 将它放在页面上并且内容呈现完美。但是当我尝试将它加载到控制器中时,它 returns NULL。希望有人能看出问题所在。
这是我的块代码:
/**
* Provides a 'homepage search' block.
*
* @Block(
* id = "home_search_block",
* admin_label = @Translation("Home Search block"),
* category = @Translation("Custom home search block example")
* )
*/
class HomeSearchBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
$form = \Drupal::formBuilder()->getForm('Drupal\homepage\Form\HomeSearchForm');
return $form;
}
}
这是我的控制器代码:
class HomeController extends ControllerBase {
public function content() {
$config = $this->config('nl_admin.settings');
$image_text = $config->get('nl_admin.homepage_image_text');
$block = Block::load('home_search_block');
$search_form = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
$build = array(
'#theme' => 'homepage',
'#image_text' => $image_text,
'#search_form' => $search_form,
'#cache' => array('max-age' => 0)
);
return $build;
}
}
如果我在控制器中使用 kint($block),它 returns NULL。
自定义块属于 entity_type "block_content" 而不是 "block"。
您需要按以下方式更改您的代码:
$block = BlockContent::load('home_search_block');
$search_form = \Drupal::entityTypeManager()
->getViewBuilder('block_content')
->view($block);
Drupal 文档中也提供了创建自定义块的有用指南,如果您想这样做的话:
https://www.drupal.org/docs/8/creating-custom-modules/create-a-custom-block
自定义块的自定义模板也很棘手,这里有一些技巧post:
https://www.drupal.org/docs/8/creating-custom-modules/create-a-custom-block
我创建了一个自定义块,并试图将其加载到控制器中以最终在树枝模板中呈现。我知道块代码有效,因为我可以使用块 ui 将它放在页面上并且内容呈现完美。但是当我尝试将它加载到控制器中时,它 returns NULL。希望有人能看出问题所在。
这是我的块代码:
/**
* Provides a 'homepage search' block.
*
* @Block(
* id = "home_search_block",
* admin_label = @Translation("Home Search block"),
* category = @Translation("Custom home search block example")
* )
*/
class HomeSearchBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
$form = \Drupal::formBuilder()->getForm('Drupal\homepage\Form\HomeSearchForm');
return $form;
}
}
这是我的控制器代码:
class HomeController extends ControllerBase {
public function content() {
$config = $this->config('nl_admin.settings');
$image_text = $config->get('nl_admin.homepage_image_text');
$block = Block::load('home_search_block');
$search_form = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
$build = array(
'#theme' => 'homepage',
'#image_text' => $image_text,
'#search_form' => $search_form,
'#cache' => array('max-age' => 0)
);
return $build;
}
}
如果我在控制器中使用 kint($block),它 returns NULL。
自定义块属于 entity_type "block_content" 而不是 "block"。
您需要按以下方式更改您的代码:
$block = BlockContent::load('home_search_block');
$search_form = \Drupal::entityTypeManager()
->getViewBuilder('block_content')
->view($block);
Drupal 文档中也提供了创建自定义块的有用指南,如果您想这样做的话: https://www.drupal.org/docs/8/creating-custom-modules/create-a-custom-block
自定义块的自定义模板也很棘手,这里有一些技巧post: https://www.drupal.org/docs/8/creating-custom-modules/create-a-custom-block