コアポイント
- Drupal 8のクラスは、構成システムと対話するための追加の機能を提供し、ツールがフォームを保存された値に変換できるようにします。これは、拡張クラスを
ConfigFormBase
に置き換え、フォームに必要な変更を加えることで実行できます。 Drupal 8の構成はYAMLファイルに保存され、異なるサイトに展開するためにUIを介して変更できます。ConfigFormBase
Drupal 8のサービスコンテナにより、サービスの作成、つまりグローバルオペレーションを実行し、アクセスのためにサービスコンテナに登録するPHPクラスを作成できます。依存関係注入は、オブジェクトを他のオブジェクトに渡すために使用され、分離を確保します。モジュールのルートディレクトリに - ファイルを作成して、サービスを登録できます。
demo.services.yml
Drupal 8での依存関係注入は、あるオブジェクトが別のオブジェクトに依存関係を提供できるようにする設計パターンであり、コードのテストがよりモジュール化されやすくなります。これは、 クラスを拡張するか、 - を実装することで実現できます。また、
ControllerBase
クラスを使用して、グローバルにサービスにアクセスすることもできます。ContainerInjectionInterface
Drupal
Drupal 8モジュール開発に関する以前の記事では、ブロックタイプとフォームの作成を検討しました。ブロックが再利用可能であり、ブロックタイプを定義するために必要なすべてが1つのクラスで行われることがわかりました。同様に、フォーム生成関数は、特定の方法で実行されるタスクがDrupal 7で慣れているタスクと同様のクラスにもグループ化されます。
このチュートリアルでは、前回終了した場所から続けます。 Drupal 8構成システムを介して値を保存するために使用されるフォームにを変換する方法について説明します。その後、サービスコンテナと依存噴射を例で説明します。
このチュートリアルシリーズに記載されているすべてのコードを取得したい場合は、このリポジトリをご覧ください。 DemoForm
構成フォーム
を定義したとき、
クラスを拡張しました。これはDemoForm
の最も簡単な実装です。ただし、Drupal 8にはA FormBase
も付属しており、構成システムとの対話を非常に簡単にする追加機能をいくつか提供します。 FormInterface
ConfigFormBase
私たちが今しなければならないことは、
(そしてもちろんDemoForm
it)に置き換えることです:ConfigFormBase
use Drupal\Core\Form\ConfigFormBase; class DemoForm extends ConfigFormBase {
フォームの残りの部分を変更し続ける前に、Drupal 8の作業の単純な構成を見てみましょう。より複雑な構成エンティティがあるため、「シンプル」と言いましたが、今日は紹介しません。今のところ、モジュール(コアまたはコントリブ)によって提供される構成は、YAMLファイルに保存されています。モジュールが有効になっている場合、このデータはデータベースにインポートされます(使用するとパフォーマンスを改善するため)。 UIを使用すると、この構成を変更してから、異なるサイトに展開するためにYAMLファイルに簡単にエクスポートできます。
モジュールは、モジュールルートディレクトリのフォルダーのYAMLファイルにデフォルトの構成を提供できます。このファイルの命名規則は、モジュールの名前をプレフィックスすることです。それでは、config/install
というファイルを作成しましょう。このファイルでは、以下を貼り付けましょう
demo.settings.yml
demo: email_address: demo@demo.comキーの下には、別のキー値ペアがあります。通常、これらのネストされた値にアクセスするには、ドット(。)を使用します。私たちの場合、それは
です。 demo
このファイルがあると、覚えておく必要がある重要なことの1つは、このファイルがモジュールがインストールされたときにのみインポートされることです。したがって、再インストールし続けてください。これで、フォームに戻って、調整する必要がある方法を1つずつ見ることができます。 demo.email_address
メソッドが次のように見えるものです
最初に、に反して、buildForm()
クラスは、フォームアレイに要素を追加するためにこの方法を実装します([送信]ボタン)。そのため、独自の要素を追加する前に、親クラスの前にしたことを使用できます。
public function buildForm(array $form, array &$form_state) { $form = parent::buildForm($form, $form_state); $config = $this->config('demo.settings'); $form['email'] = array( '#type' => 'email', '#title' => $this->t('Your .com email address.'), '#default_value' => $config->get('demo.email_address') ); return $form; }構成セクションの場合。 Drupal 8は、構成と対話するために使用できる
オブジェクトを提供します。一部のクラスでは、依存噴射を通じてそれを取得しています。 FormBase
これはそのようなクラスです。 ConfigFormBase
メソッドを使用して、Config
シンプルな構成が入力されているConfigFormBase
オブジェクトを取得しています。次に、電子メールフォーム要素の
について、config()
オブジェクトのConfig
メソッドを使用して、電子メールアドレスの値を取得します。 demo.settings
#default_value
次に、Config
メソッドが同じままになることができるため、コミットハンドラーを変更する必要があります。
get()
この方法では、最初に構成した
メソッドを使用して、validateForm()
の値をユーザーがサビされた値に変更します。次に、構成を保存するために
public function submitForm(array &$form, array &$form_state) { $config = $this->config('demo.settings'); $config->set('demo.email_address', $form_state['values']['email']); $config->save(); return parent::submitForm($form, $form_state); }
それだけです。キャッシュをクリアして試してみることができます。新しいメールアドレスを送信することにより、構成に保存します。 demo.settings.yml
ファイルは確かに変更されませんが、demo.settings
構成をエクスポートして別のサイトにインポートできます。
サービスコンテナと依存関係噴射
次に見たいのは、サービスコンテナです。サービスの背後にある哲学は、機能を再利用可能なコンポーネントに分解することです。したがって、サービスは、アクセスのためにいくつかのグローバルな操作とサービスコンテナに登録するPHPクラスです。
依存関係注射は、オブジェクトを渡して分離を確保する方法です。各サービスは1つのものを処理する必要があり、別のサービスが必要な場合は、後者を前者に注入できます。しかし、すぐにそれを行う方法がわかります。
次に、非常に簡単なサービスを作成し、コンテナに登録します。単純な値を返す実際の方法は1つしかありません。次に、サービスをDemoController
に依存関係として注入し、サービスが提供する値を使用します。
ファイルを作成する必要があります。次のコンテンツがあります。
demo.services.yml
use Drupal\Core\Form\ConfigFormBase; class DemoForm extends ConfigFormBase {です。
module_name.services.yml
最初の行は、サービスの配列を作成します。 2番目の行は、最初のサービス(モジュール名で接頭辞と呼ばれる)を定義します。 3行目は、このサービスのためにインスタンス化されるクラスを指定します。次に、モジュールの
クラスファイルを作成することです。これは私のサービスが行うことです(実際には何もありません。それを使用する方法を説明するだけです):demo_service
src/
DemoService.php
ここでは、非常に基本的なものであるため、ここで説明する必要はありません。次に、私たちの
demo: email_address: demo@demo.comクラスを介してグローバルにコンテナにアクセスするか、依存関係噴射を使用してこのクラスのオブジェクトをコントローラーに渡すことです。ベストプラクティスは、2番目のアプローチをとる必要があることを示唆しているので、それが私たちがやろうとしていることです。ただし、サービスへのグローバルアクセスが必要な場合があります。これを行うには、次のことを行うことができます
DemoController
NowDrupal
は、作成したばかりのクラスのオブジェクトです。ただし、
public function buildForm(array $form, array &$form_state) { $form = parent::buildForm($form, $form_state); $config = $this->config('demo.settings'); $form['email'] = array( '#type' => 'email', '#title' => $this->t('Your .com email address.'), '#default_value' => $config->get('demo.email_address') ); return $form; }
最初に、サービスコンテナにアクセスする必要があります。これは、コントローラーにとって非常に簡単です。他のヘルパープログラムに加えて、これを提供する$service
クラスを拡張できます。または、コントローラーがDemoService
を実装することもできます。これにより、コンテナにアクセスすることもできます。しかし、私たちはDemoController
に固執するので、クラスが必要です。
次に、コントローラーの別のオブジェクトをインスタンス化し、必要なサービスに合格するuse
メソッドの要件としてContainerInterface
symfony 2create()
が必要です。
最後に、合格したサービスオブジェクト(create()
の返されたオブジェクト)を取得するためのコンストラクターが必要になり、後で使用するためにプロパティに割り当てる必要があります。 create()
メソッドを返す順序は、オブジェクトがコンストラクターに渡される順序を反映する必要があります。
では、変更されたDemoController
:
use Drupal\Core\Form\ConfigFormBase; class DemoForm extends ConfigFormBase {
ご覧のとおり、すべての手順はここにあります。 create()
メソッドは、コントローラークラスの新しいインスタンスを作成し、コンテナから取得したサービスを渡します。最後に、クラスのインスタンスはDemoService
プロパティに保存されます。これは、その$demoService
メソッドを呼び出すために使用できます。この値は、「Hello」メッセージで使用されます。キャッシュをクリアして、試してみてください。 getDemoValue()
パスに移動すると、「hello upchuk!」が表示されます。 demo/
結論 この記事では、たくさんのクールなものを見ました。構成システムが単純な構成をどのように管理し、これにどのような「フォーム」機能が提供されるかを見てきました。
の実装方法と、拡張時に使用できる機能を探ることをお勧めします。さらに、UIのサイト間でインポート/エクスポート構成の使用を練習する必要があります。これからは、これは展開プロセスにとって大きな改善になります。
ConfigFormBase
次に、サービス、それらが何であるか、どのように機能するかを調べました。どこからでもアクセスできる再利用可能で分離された機能ブロックを維持するための素晴らしい方法。依存噴射の概念がもはや怖くないことを願っています(それがあなたのためであれば)。基本的には、パラメーターを手続き上の関数に渡すことと同じですが、Symfonyとその強力なサービスコンテナがコンストラクターメソッド(またはセッター)を使用して舞台裏で行われます。
Drupal 8のサービスコンテナの役割は何ですか?
Drupal 8のサービスコンテナは、Drupalアプリケーションでグローバルに使用されるサービスの作成を管理する重要なコンポーネントです。各サービスが一度だけインスタンス化され、メモリを保存し、パフォーマンスが向上することが保証されます。また、サービスコンテナは、あるオブジェクトが別のオブジェクトに依存関係を提供できるようにするデザインパターンである依存関係インジェクションを処理します。これにより、コードがよりモジュール化され、テストが容易になり、より良い組織が促進されます。
Drupal 8で新しいサービスを定義する方法は?
Drupal 8で新しいサービスを定義するには、モジュールのルートディレクトリにservices.yml
ファイルを作成する必要があります。このファイルには、サービスの名前、クラス、およびパラメーターが含まれている必要があります。このクラスは、サービスを実装するクラスの完全に適格な名前である必要があり、パラメーターはサービスが依存するサービスまたはパラメーターである必要があります。
Drupal 8の構成管理の目的は何ですか?
Drupal 8の構成管理は、一貫した方法でサイト構成データを管理できるシステムです。構成データをインポート、エクスポート、および同期することができます。これは、開発環境から生産サイトへの構成変更を移動するときに役立ちます。また、時間の経過とともにサイト構成の変更を追跡および管理する方法も提供します。構成管理システムを使用して構成データをエクスポートおよびインポートする方法は?
Drupal 8で構成データをエクスポートするには、管理パネルの構成管理インターフェイスを使用するか、Drushコマンドを使用できます。エクスポートされたデータはYAML形式であり、簡単に読み取って編集できます。構成データをインポートするには、構成管理インターフェイスを介してエクスポートしたYAMLファイルをアップロードするか、Drushコマンドを使用できます。潜在的なデータの損失を防ぐために、構成データをインポートする前にサイトをバックアップすることを忘れないでください。
依存噴射とは何ですか?また、Drupal 8でそれが重要なのはなぜですか?
依存関係注入は、あるオブジェクトが別のオブジェクトに依存関係を提供できるようにする設計パターンです。 Drupal 8では、サービスとコントローラーをよりモジュール化し、テストしやすくするために使用されます。オブジェクト内に依存関係を作成する代わりに、コンストラクターまたはセッターメソッドを介して渡されます(注入)。これにより、コードのテストが容易になり、柔軟性が高まり、結合が少なくなります。
Drupal 8サービスに依存関係を注入する方法は?
drupal 8のサービスに依存関係を挿入するには、
ファイルのサービスの定義でそれらを定義する必要があります。依存関係は、services.yml
キーの下にリストする必要があります。サービスが作成されると、サービスコンテナはこれらの依存関係を自動的にサービスのコンストラクターに渡します。 arguments
Drupal 8では、サービスはアプリケーションでグローバルタスクを実行するオブジェクトであり、プラグインはプラグ可能な方法で特定のタスクを実行するオブジェクトです。サービスは
ファイルで定義され、サービスコンテナによって管理されますが、プラグインはプラグインマネージャーによって発見され、インスタンス化されます。
services.yml
Drupal 8のサービスをオーバーライドする方法は?
Drupal 8でサービスを上書きするには、モジュールの
ファイルで上書きするサービスと同じ名前のサービスを定義する必要があります。新しいサービスは、元のサービスのクラスを拡張し、変更する方法をオーバーライドする必要があります。
services.yml
構成管理システムを使用して、サイト構成の変更を追跡する方法は?
Drupal 8の構成管理システムは、構成スナップショットシステムを介してサイト構成の変更を追跡する方法を提供します。このシステムは、構成データをインポートまたは同期するたびに、サイトのアクティブな構成のスナップショットを取得します。その後、これらのスナップショットを比較して、どのような変更が行われたかを確認できます。
services.yml
Drupal 8でファイルは何をしますか?
DRUPAL 8のservices.yml
ファイルは、モジュールサービスが定義されている場所です。各サービスは、一意の名前、サービスを実装するクラスの完全に適格な名前、およびサービスが依存するサービスまたはパラメーターを使用して定義されます。 services.yml
ファイルはサービスコンテナによって読み取られ、サービスコンテナはサービスの作成と注入を管理します。
以上がDrupal 8モジュール - 構成管理とサービスコンテナの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

Dreamweaver Mac版
ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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