web-dev-qa-db-ja.com

レンダリングされたビューの公開フィルターブロックをプログラムで読み込む方法

私はDrupal 8にいます。コンテンツブロックをロードする方法と同様に、IDに基づいてViews Exposed Filterブロックをロードしようとしています。

_$bid = 'exposedformview_nameview_display_name'; // Found on mysite.test/admin/structure/block/manage/exposedformview_nameview_display_name/
$block = \Drupal\block_content\Entity\BlockContent::load($bid);
$render = \Drupal::entityManager()
        ->getViewBuilder('block_content')
        ->view($block);
return $render;
_

何も出力されず、エラーログに次のメッセージが表示されます。

回復可能な致命的なエラー:Drupal\block_content\BlockContentViewBuilder :: view()に渡される引数1は、インターフェースDrupal\Core\Entity\EntityInterfaceを実装する必要があります。nullが指定されています

案の定、私がdebug($block)を実行すると、NULLが表示されます。

これは、コンテンツ配置領域で作成された他のブロックで機能することを知っていますが、ビューに公開されたフィルターブロックでも機能しない理由はわかりません。どちらもブロックの管理ページに配置できます。

編集:それはこのようにブロックをロードすることはできないようです。この方法は、ブロックで使用可能なリビジョンに依存します。ビューが公開されたフィルターブロックのリビジョンはないため、これを実現するには別の方法が必要です。おそらく、フォームを直接ロードすることによって。

1
CR47

ブロックコンテンツエンティティは、そこで必要なブロックエンティティではありません。

実際のブロックエンティティは構成エンティティです。\Drupal\block\Entity\Block :: loadメソッドを使用してロードします。

以下を試してください:

$bid = 'exposedformview_nameview_display_name';
$block = \Drupal\block\Entity\Block::load($bid);
$render = \Drupal::entityTypeManager()
        ->getViewBuilder('block')
        ->view($block);
return $render;
8
Eyal