カスタムフォームモジュールを作成します。次に、フォームをブロックで表示します。これどうやってするの ?
注:MymoduleBlock.phpを/ modules/my-module/src/Plugin/Blockパスに次のコードで作成しますが、機能しません。
<?php
namespace Drupal\my-module\Plugin\Block;
use Drupal\Core\Form\FormInterface;
use Drupal\Core\Block\BlockBase;
class MymoduleBlock extends BlockBase {
public function build() {
$form = \Drupal::formBuilder()->getForm('Drupal\my-module\Form\MymoduleForm');
return $form;
}
}
MymoduleBlock::build()
のコードは正しいもので、Drupalコアが UserLoginBlock::build()
でコアが行うことです。
_ $form = \Drupal::formBuilder()->getForm('Drupal\user\Form\UserLoginForm');
unset($form['name']['#attributes']['autofocus']);
// When unsetting field descriptions, also unset aria-describedby attributes
// to avoid introducing an accessibility bug.
// @todo Do this automatically in https://www.drupal.org/node/2547063.
unset($form['name']['#description']);
unset($form['name']['#attributes']['aria-describedby']);
unset($form['pass']['#description']);
unset($form['pass']['#attributes']['aria-describedby']);
$form['name']['#size'] = 15;
$form['pass']['#size'] = 15;
_
ブロック定義が欠落しているのは、そのクラスをプラグインとして識別するためにDrupalを許可する注釈(クラスの前のコメント)です。 Block API を参照してください。 (エンファシスは私のものです)
ブロックは、構成エンティティとpluginの組み合わせです。構成エンティティは、配置情報(テーマ、リージョン、ウェイト)およびブロックに固有のその他の構成を格納します。block pluginは、ブロックのコンテンツを表示するためのレンダリングを行います。
ブロックプラグインは、 _
\Drupal\Core\Block\Annotation\Block
_ によって定義されるthe Annotationsを使用します。注釈の詳細については、 注釈トピック を参照してください。
例として使用したブロッククラスでは、アノテーションは次のようになります。
_/*
* @Block(
* id = "user_login_block",
* admin_label = @Translation("User login"),
* category = @Translation("Forms")
* )
*/
_
また、PHP関数では許可されないハイフンをモジュールのマシン名に含めることはできません。フック名は、マシンのマシン名から派生するため、フックを実装するときに問題が発生します。たとえば、モジュールの hook_page_attachments()
の実装はmy-module_page_attachments()
であり、これは許容できないPHP関数名。
モジュールがフックを実装しないと思われる場合は、大部分のモジュールが少なくとも hook_update_N() を実装していることを覚えておいてください。モジュールマシン名の大文字。
すべてのコードを投稿している場合、Blockクラスにアノテーションがありません。注釈は、プラグインを登録するためにDrupal 8によって使用されます。
カスタムブロックを開始するには、このリンクを確認してください。
https://www.drupal.org/docs/8/creating-custom-modules/create-a-custom-block
ブロックプラグインを作成したら、必ずキャッシュをクリアしてください。
追伸モジュールに「my-module」という名前を付けたようです。モジュール名にはダッシュを使用できません。アンダースコアを使用してください。モジュールの命名の詳細については、以下を参照してください。 https://www.drupal.org/docs/8/creating-custom-modules/naming-and-placing-your-drupal-8-module