Drupal 8モジュールの構築:ブロックとフォーム
コアポイント
- Drupal 8は、ブロックの新しい概念をプラグインとして導入し、サイト全体に再利用できるようにします。ブロックはUIで作成し、複数回使用できます。 Drupal 8では、構成可能なテキストを返すカスタムブロックを作成できます。これは、UIに新しいブロックタイプを作成し、サイト全体で再利用することで実行できます。
- Drupal 8を使用すると、ブロックに構成フォームを追加できます。これにより、ユーザーはブロックを編集し、テキストフィールドに名前を指定すると、ブロックがその名前に挨拶を表示します。
- Drupal 8モジュール開発には、単純なフォームの作成が含まれます。フォーム定義関数は、クラスでグループ化されます。提出されたフォーム値は、画面に単純に印刷されて、どのように機能するかを示します。
- Drupal 8では、カスタムモジュールでフォームクラスを定義することにより、カスタムフォームを作成できます。フォームクラスは、「Formbase」クラスを拡張し、3つのメソッドを実装する必要があります。
このシリーズの最初の部分では、基本から始めてDrupal 8モジュール開発を学びます。 Drupalがモジュールに必要なファイルをどのように理解しているか、ルーティングプロセスの仕組み、および構成方法でプログラムでメニューリンクを作成する方法を学びました。 このチュートリアルでは、このリポジトリにあるサンドボックスモジュールをさらに見て、ブロックとフォームの2つの重要な機能を調べます。これを行うには、構成可能なテキストを返すカスタムブロックを作成します。その後、ユーザーがサビされた値を画面に印刷するためのシンプルなフォームを作成します。
drupal 8ブロックD8のブロックAPIのクールな新しい変更は、プラグインとしてそれらを作成することにより、ブロックをより顕著にすることです(まったく新しい概念)。これは、UIにブロックを作成してサイト全体で再利用できるため、再利用可能な機能(バックグラウンド)であることを意味します。1回だけのブロックを使用することに限定されなくなりました。 デフォルトで画面に印刷するシンプルなブロックタイプを作成しましょう
hello world!。モジュールのルートにあるSRC/プラグイン/ブロックフォルダーでクラスファイルを使用する必要があります。もちろん、新しいブロックタイプのデモブロックに名前を付けましょう。もちろん、demoblock.phpという名前のファイルにある必要があります。このファイルでは、以下から始めることができます。
<?php namespace Drupal\demo\Plugin\Block; use Drupal\block\BlockBase; use Drupal\Core\Session\AccountInterface; /** * Provides a 'Demo' block. * * @Block( * id = "demo_block", * admin_label = @Translation("Demo block"), * ) */ class DemoBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { return array( '#markup' => $this->t('Hello World!'), ); } /** * {@inheritdoc} */ public function access(AccountInterface $account) { return $account->hasPermission('access content'); } }
他のすべてのクラスファイルと同様に、クラスの最初の名前を付けます。次に、ブロックベースクラスを使用して、拡張できるようにし、AccountInterfaceクラスを使用して、現在ログインしているユーザーにアクセスできるようにします。次は、Drupal 7:コメントで確かに見たことがないものです。
アノテーションは、クラス定義と同じファイルのコメントブロックにあるPHPディスカバリーツールです。これらのアノテーションを使用して、Drupalに、ID demo_blockおよびadmin_labelをdemo block(翻訳システムに渡す)で新しいブロックタイプ(@block)を登録したいことを知らせます。
次に、ブロックベースクラスを独自のデモブロックに拡張し、2つの方法(実装する最も一般的な方法)を実装します。 Build()メソッドは、ブロックが印刷するレンダリング可能な配列を返すため、最も重要です。 Access()メソッドは、アクセスを制御してこのブロックを表示します。それに渡された引数は、AccountInterfaceクラスのインスタンスであり、その場合は現在のユーザーです。注意すべきもう1つの興味深いことは、翻訳にグローバルにt()関数を使用せず、代わりにクラスの親クラスで実装されているt()メソッドを参照することです。
それだけです。キャッシュをクリアして、ブロックレイアウト構成ページに移動できます。クールなことは、右側にブロックタイプがあること(それらを通してフィルタリングできる)で、これらの種類のブロックの1つ以上をサイトのさまざまな領域に配置できることです。
DRUPAL 8ブロック構成< UIで使用する新しいブロックタイプを作成する方法を学んだので、APIをより深く掘り下げて、構成フォームを追加しましょう。ブロックを編集し、テキストフィールドに名前を指定することを可能にします。ブロックは、world
に挨拶するのではなく、その名前に挨拶します。最初に、テキストフィールドを含むフォームを定義する必要があります。したがって、デモブロッククラスでは、blockform()と呼ばれる新しいメソッドを追加できます。
このフォームAPI実装は、Drupal 7に非常によく似ている必要があります。ただし、ここにはいくつかの新しいコンテンツがあります。最初に、親クラスから$フォーム配列を取得します(したがって、独自のフィールドを追加して既存のフォームを構築します)。標準のoopのもの。次に、このブロックの構成を取得して保存します。ブロックベースクラスは、これを行うgetConfiguration()メソッドを定義します。 demo_block_settings値を#default_valueが設定された場合に備えて配置します。次に、このフォームの提出ハンドラーであり、フィールドの値を処理し、Chunkの構成に保存します。
/** * {@inheritdoc} */ public function blockForm($form, &$form_state) { $form = parent::blockForm($form, $form_state); $config = $this->getConfiguration(); $form['demo_block_settings'] = array( '#type' => 'textfield', '#title' => $this->t('Who'), '#description' => $this->t('Who do you want to say hello to?'), '#default_value' => isset($config['demo_block_settings']) ? $config['demo_block_settings'] : '', ); return $form; }
このメソッドはデモブロッククラスにもあり、それが行うのは、Demo_block_settingsフィールドの値をブロック構成の新しいアイテムとして保存することだけです(一貫性のためのキーと同じ名前を使用)。
最後に、尋ねる名前を含めるには、build()メソッドを調整する必要があります:
<?php namespace Drupal\demo\Plugin\Block; use Drupal\block\BlockBase; use Drupal\Core\Session\AccountInterface; /** * Provides a 'Demo' block. * * @Block( * id = "demo_block", * admin_label = @Translation("Demo block"), * ) */ class DemoBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { return array( '#markup' => $this->t('Hello World!'), ); } /** * {@inheritdoc} */ public function access(AccountInterface $account) { return $account->hasPermission('access content'); } }
これまでのところ、これは非常に簡単に見えるはずです。私たちは、ブロックの構成を検索し、フィールドの値が設定されている場合は、印刷されたステートメントに使用します。そうでない場合、一般的なステートメントが使用されます。ゾーンに割り当てたブロックを編集し、要求する名前を追加することで、キャッシュをクリアしてテストできます。注意すべきことの1つは、画面に印刷する際にユーザーの入力をクリーンアップする責任がまだあるということです。簡潔にするために、私はこれらの手順を含めませんでした。
drupal 8 form
このチュートリアルで探索する最後のことは、シンプルなフォームを作成する方法です。スペースの制限のため、その構成管理の側面(フォームで送信された構成値を保存する)をカバーしません。代わりに、送信された値が画面に単純に印刷されて、どのように機能するかを示す単純なフォーム定義を説明します。
Drupal 8では、フォーム定義関数がクラスにグループ化されています。それでは、src/form/demoform.phpで単純なDemoformクラスを定義しましょう。OOPの側面とは別に、すべてがDrupal 7に非常に似ている必要があります。フォームAPIはほとんど変更されていません(いくつかの新しいフォーム要素とそのようなカプセル化を追加することを除きます)。では、上記で何が起こったのでしょうか?
/** * {@inheritdoc} */ public function blockForm($form, &$form_state) { $form = parent::blockForm($form, $form_state); $config = $this->getConfiguration(); $form['demo_block_settings'] = array( '#type' => 'textfield', '#title' => $this->t('Who'), '#description' => $this->t('Who do you want to say hello to?'), '#default_value' => isset($config['demo_block_settings']) ? $config['demo_block_settings'] : '', ); return $form; }
最初に、クラスに名前を付け、
コアフォームベースクラスを使用して、独自のDemoFormクラスで拡張できるようにします。次に、4つのメソッドを実装します。そのうち3つは非常に馴染みがあるはずです。 getFormid()メソッドは新しくて必須であり、フォームのマシン名を返すためにのみ使用されます。 buildform()メソッドは再び必須であり、フォームを構築します。どうやって? Drupal 7から慣れているように。 VALIDATEFORM()メソッドはオプションであり、その目的もD7から非常に明確にする必要があります。最後に、submitform()メソッドはコミット処理を実行します。非常に論理的で整理されています。では、このフォームで何を達成したいですか?ユーザーに記入したい電子メールフィールド(Drupal 8の新しいフォーム要素)があります。デフォルトでは、Drupalは入力された値が実際に電子メールアドレスであるかどうかをチェックします。しかし、検証関数では、それが.comの電子メールアドレスであることを確認し、そうでない場合は、そのフィールドにフォームエラーを設定します。最後に、送信ハンドラーはページにメッセージを印刷するだけです。
このフォームを使用するために必要な最後のことは、ルートを提供することです。したがって、demo.routing.ymlファイルを編集して、次を追加します。これは、前の投稿で簡単なページをルーティングしたものと似ている必要があります。唯一の重要な違いは、デフォルトでは_FORMを使用して、ターゲットがフォームクラスであることを指定することです。したがって、値は作成したクラス名です。
キャッシュをクリアしてデモ/フォームに移動してフォームを表示してテストします。
/** * {@inheritdoc} */ public function blockSubmit($form, &$form_state) { $this->setConfigurationValue('demo_block_settings', $form_state['values']['demo_block_settings']); }
Drupal_get_form()に精通していて、以前にDrupal 7で行ったようなフォームをロードする方法を知りたい場合、答えはグローバルDrupalクラスにあります。フォームを取得するには、そのformbuilder()メソッドを使用して、次のことを行うことができます。
<?php namespace Drupal\demo\Plugin\Block; use Drupal\block\BlockBase; use Drupal\Core\Session\AccountInterface; /** * Provides a 'Demo' block. * * @Block( * id = "demo_block", * admin_label = @Translation("Demo block"), * ) */ class DemoBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { return array( '#markup' => $this->t('Hello World!'), ); } /** * {@inheritdoc} */ public function access(AccountInterface $account) { return $account->hasPermission('access content'); } }
$フォームを返すことができます。これは、フォームのレンダリング可能な配列になります。
結論
この記事では、Drupal 8モジュールの開発を調査し、ブロックとフォームの2つの新しいトピックを紹介し続けます。 UIでブロックを作成するために使用できる独自のブロックタイプを作成する方法を学びました。また、カスタム構成を追加し、後で使用するために値を保存する方法も学びました。フォームに関しては、Formbaseクラスの簡単な実装が見られました。これは、ユーザーがサビされた値を画面に印刷するために使用しています。次のチュートリアルでは、構成フォームについてすぐに学びます。 Drupal 8構成システムを使用して、ユーザーがサビされた値を保存します。さらに、サービスコンテナと依存関係の注入と、Drupal 8での作業方法について学びます。じゃあね。
Drupal 8モジュールの構築に関するよくある質問:ブロックとフォーム(FAQ)
Drupal 8モジュールの基本構造は何ですか?Drupal 8モジュールは、基本的に特定の機能を含むファイルのセットであり、PHPで記述されています。 Drupal 8モジュールの基本構造には、.info.ymlファイル、.moduleファイル、および.css、.js、.twigなどのその他のオプションファイルが含まれます。 .info.ymlファイルは、モジュールの名前、説明、パッケージ、タイプ、およびコア互換性をリストするために使用されます。 .moduleファイルは、実際のPHPコードの配置場所です。
Drupal 8でカスタムブロックを作成する方法は?
Drupal 8でカスタムブロックを作成するには、新しいカスタムモジュールの作成とブロックプラグインの定義が含まれます。ブロックプラグインは、ブロックのプロパティとメソッドを定義するPHPクラスファイルです。モジュールの「SRC/プラグイン/ブロック」ディレクトリに配置する必要があります。ブロックプラグインクラスは、「ブロックベース」クラスを拡張し、「build()」メソッドを実装して、ブロックコンテンツのレンダリング可能な配列を返す必要があります。
Drupal 8でカスタムフォームを作成する方法は?
Drupal 8でカスタムフォームを作成するには、新しいカスタムモジュールを作成し、そこでフォームクラスを定義することが含まれます。フォームクラスは、フォームのプロパティとメソッドを定義するPHPクラスファイルです。モジュールの「src/form」ディレクトリに配置する必要があります。フォームクラスは、「Formbase」クラスを拡張し、3つのメソッドを実装する必要があります。 「buildform()」メソッドはフォームアレイを返し、「submitform()」メソッドはフォームの送信を処理します。
Drupal 8サイトの特定の領域にブロックを表示する方法は?
Drupal 8サイトの特定の領域にブロックを表示するには、管理インターフェイスのブロックレイアウトページに移動する必要があります。ここでは、ブロックをトピックのあらゆる領域に割り当てることができます。パス、コンテンツタイプ、ユーザーロールなどに基づいて、ブロックの可視性設定を構成することもできます。
Drupal 8カスタムフォームの入力を確認する方法は?
drupal 8カスタムフォームへの入力を確認するには、フォームクラスの「validateform()」メソッドをオーバーライドできます。フォームを送信するとき、この方法は「submitform()」メソッドの前に呼び出されます。 「validateform()」メソッドでは、検証ロジックを追加し、「setError()」メソッドを呼び出して、フォーム要素のエラーメッセージを設定できます(検証が失敗した場合)。
Drupal 8の既存のフォームを変更する方法は?
Drupal 8の既存のフォームを変更するには、モジュールに「hook_form_form_id_alter()」関数を実装できます。この関数は、フォームを構築するときに呼び出されます。これにより、フォームアレイを変更できます。 「form_id」は、変更するフォームのIDに置き換える必要があります。
Drupal 8でフォームをプログラム的に送信する方法は?
Drupal 8のフォームをプログラム的に送信するには、フォームクラスのインスタンスを作成し、「submitform()」メソッドを呼び出すことができます。ただし、このメソッドを呼び出す前に、フォーム状態オブジェクトを準備し、フォーム要素の値を設定する必要があります。
Drupal 8で構成フォームを作成する方法は?
Drupal 8で構成フォームを作成するには、「Formbase」クラスの代わりに「configformbase」クラスを拡張するフォームクラスを定義できます。 「configformbase」クラスは、「geteditableconfignames()」や「config()」など、構成データを処理する他の方法を提供します。構成データはDrupal構成システムに保存され、コードのどこからでもアクセスできます。
Drupal 8でマルチステップフォームを作成する方法は?
Drupal 8でマルチステップフォームを作成するには、FormStateInterfaceオブジェクトを使用してステップ間でデータを保存できます。 「buildform()」メソッドでは、フォーム状態の現在のステップを確認し、各ステップの別のフォームアレイを返すことができます。 「submitform()」メソッドでは、現在のステップを確認してから、データを保存して次のステップに移動するか、最終的なコミットを処理できます。
Drupal 8でAjaxフォームを作成する方法は?
Drupal 8にAjaxフォームを作成するには、「burtionform()」メソッドのフォーム要素に「#ajax」属性を追加できます。このプロパティは、要素がトリガーされたときに呼び出されるコールバック関数を指定する配列である必要があります。コールバック関数は、更新するフォームの一部またはAJAXコマンドのセットを返す必要があります。
この改訂された出力は、元の画像形式と配置を維持し、FAQSセクションは繰り返しを避け、妥当な長さを維持するために大幅に凝縮されています。
以上がDrupal 8モジュールの構築:ブロックとフォームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...
