キーテイクアウト
-
Drupal 8のプラグインデリバティブは、同じプラグインの複数のインスタンスの動的宣言を可能にし、ユーザーが構成した機能をプラグインに変換します。
- Deriverクラスは、初期プラグインに基づいているが、構成または定義データがわずかに異なるプラグイン定義のリストを提供するために使用されます。 プラグインマネージャーの派生Iscoverydecoratorは、各プラグインでデリバなクラスを探し、リストを要求するためにデリバティブを取得するために使用されます。
- プラグインデリバティブは強力なツールですが、特にDrupalを初めて使用したり、プラグインシステムに不慣れな開発者にとっては、セットアップと管理に複雑になります。ベースプラグインの変更がすべての導関数に影響を与える可能性があるため、慎重な管理とテストが必要です。
- 以前のチュートリアルでは、Drupal 8プラグインシステムと、独自のカスタムプラグインタイプを作成する方法を調べました。 Drupal 7の_Infoフックを介して宣言された機能の多くがこれらのプラグインに置き換えられていることがわかりました。私たちのユースケースは非常に基本的であり、そのような機能の各 インスタンス
しかし、そのようなインスタンスが必要な場合は、小さなサブシステムの外部のいくつかの要因に応じて動的に宣言された場合はどうなりますか?たとえば、Drupal 7で_Infoフックを宣言する場合、
ループがどこで見られるのでしょうか?これに対する短い答えは、 私たちがやろうとしていることは、実際には非常に簡単です。サイト上のすべての記事ノードに対してブロックがある基本的なノードブロック機能を実装します。ばかげている?もちろん。サイトのすべてのノードに対してこれを行う必要がありますか?間違いなくそうではありません!しかし、これは非常に基本的な実装であり、物事を短く保ち、プラグインデリバティブの使用を実証することを目的としています。
もう少し深くするために、特定のタイプのすべてのプラグインのリストが要求されると、プラグインマネージャーはディスカバリーメカニズムを使用して、このタイプのすべてのプラグインをロードします。そのメカニズムが誘導体を誘導することで装飾されている場合、マネージャーは導関数も取得することができます。これを行うために、デリバティブディスカバリーは各プラグインでデリバークラスを探し、それを見つけた場合、このリストを尋ねます。
デリバティブクラス プラグインデリバティブの役割が何であるかがわかったので、ブロックプラグインで使用される最初のデリバクラスを作成しましょう(1分で作成します)。
最後に、getDerivativeDefinitions()は、このクラスを使用するプラグインに由来するプラグイン定義の配列を提供するメソッドです。引数として$ base_plugin_definitionを受信します(このデリバーを使用する実際のプラグインの定義)、それを使用してデリバティブ定義を構築します。私たちの場合、すべての記事ノードを無差別にロードし、それぞれについて、別のadmin_labelを持つことによってのみ異なる別の定義を作成します(これはDrupalcoreblockannotationblock Annotationクラスのプロパティです)。デリバティブの配列は、デリバティブのIDによってキー化されています(この場合、後で使用するノードID)。
ブロックプラグイン
このプラグインの注釈で最初に気付くのは、以前に作成したクラスを指すデリバーキーです。そして、それが基本的に私たちが2つを結合するために必要なすべてです。微分ディスカバリーデコレーターは、重いリフティングを処理します。 残りの多くは、私たちがよく知っているはずの基本的なブロック構築です。興味深いのは、getDerivativeID()メソッドを使用して、デリバティブのIDを表示し、それを使用してノードオブジェクトをロードし、実際のノード出力としてブロックを構築することもできることです。最後に、BlockAccess()メソッド内で、このブロックが実際のノード自体と同じアクセスチェックを持っていることを確認します。したがって、現在のユーザーが現在のノードを表示するためにアクセスできない場合、ブロックは表示されません。
この記事では、プラグインデリバティブを見て、それらがどのように機能するかの簡単な例を見ました。このトピックの重要なテイクは、プラグインデリバティブが同じプラグインの複数のインスタンスを動的に宣言する方法であるということです。通常、ユーザー構成の機能(メニューなど)をプラグイン(メニューブロックなど)に変換するのに役立ちます。
質問?コメント?さらに説明したいことはありますか?お知らせください! Drupal 8プラグインデリバティブは強力なツールですが、いくつかの課題があります。主な課題の1つは、特にDrupalが初めての開発者またはそのプラグインシステムに精通していない開発者にとって、セットアップと管理に複雑になる可能性があることです。さらに、各デリバティブは単一のベースプラグインのバリエーションであるため、ベースプラグインの変更はすべてのデリバティブに影響を与える可能性があるため、慎重な管理とテストが必要です。パーティープラグイン?
プラグインデリバティブは、特定のタイプのプラグインをそれ自体の複数のインスタンスとしてシステム内で表現できる方法です。言い換えれば、プラグインは、初期プラグイン(同じベース定義から開始)に基づいているが、わずかに異なる構成または定義データを持つプラグイン定義のリストを提供する責任のあるデリバークラスを参照できます。上記で言及したSystemMenublockは、素晴らしい例です。サイトにメニューがあるのと同じくらい多くのデリバティブを備えた単一のプラグインです。
クラスを実装する必要があるのは、DeriverInterfaceと2つの方法を実装するだけです。代わりに、deriverコンテナを認識させたいので、containerderiverInterfaceを使用します。なぜ?依存関係噴射を使用してDrupalのエンティティマネージャーをロードして、ノードストレージにアクセスできるようにしているためです(これはコンストラクターとcreate()メソッドが行うものです)。さらに、Deriverクラスは、必要な方法の1つ(getDerivativeDefinition())の1つを既に処理しているため、Deriverbaseクラスから拡張されています。 Deriverクラスができたので、それを使用してそれ自体の複数のインスタンスを生成する単純なブロックプラグインを作成しましょう(記事ノードごとに1つ)。
SRC/Plugin/block/nodeblock.php:
の内部
<?php /**
* @file
* Contains \Drupal\demo\Plugin\Derivative\NodeBlock.
*/
namespace Drupal\demo\Plugin\Derivative;
use Drupal\Component\Plugin\Derivative\DeriverBase;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Provides block plugin definitions for nodes.
*
* @see \Drupal\demo\Plugin\Block\NodeBlock
*/
class NodeBlock extends DeriverBase implements ContainerDeriverInterface {
/**
* The node storage.
*
* @var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $nodeStorage;
/**
* Constructs new NodeBlock.
*
* @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
* The node storage.
*/
public function __construct(EntityStorageInterface $node_storage) {
$this->nodeStorage = $node_storage;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, $base_plugin_id) {
return new static(
$container->get('entity.manager')->getStorage('node')
);
}
/**
* {@inheritdoc}
*/
public function getDerivativeDefinitions($base_plugin_definition) {
$nodes = $this->nodeStorage->loadByProperties(['type' => 'article']);
foreach ($nodes as $node) {
$this->derivatives[$node->id()] = $base_plugin_definition;
$this->derivatives[$node->id()]['admin_label'] = t('Node block: ') . $node->label();
}
return $this->derivatives;
}
}
結論DRUPAL 8プラグインデリバティブとは何ですか?なぜ重要なのか?これは、パフォーマンスを実行するために多数の同様のタスクがある場合に特に便利ですが、各タスクにはわずかに異なる構成が必要です。プラグインデリバティブを使用することにより、単一のベースプラグインを作成してから、必要なものとしてそのプラグインのバリエーションを生成し、それぞれ独自の構成を備えています。これにより、コードを大幅に簡素化し、Drupal 8サイトをより効率的かつ管理しやすくすることができます。 。まず、すべてのデリバティブが共有する基本的な機能を定義するベースプラグインを作成する必要があります。次に、ベースプラグインを拡張し、derivativativativationInterfaceを実装するプラグインデリバティブクラスを作成する必要があります。このクラスは、個々のデリバティブを生成する責任があります。最後に、Drupalのプラグインマネージャーとプラグインデリバティブを登録して、検出および使用できるようにする必要があります。
カスタムモジュールを備えたDrupal 8プラグインデリバティブを使用できますか?デリバティブは、カスタムモジュールで使用できます。実際、これらはこのコンテキストで特に役立ちます。単一のベースモジュールを作成し、それぞれが独自の構成を備えたそのモジュールの複数のバリエーションを生成できるからです。これにより、開発プロセスを大幅に簡素化し、カスタムモジュールをより効率的かつ管理しやすくすることができます。幅広いシナリオで使用できます。いくつかの一般的なユースケースには、それぞれが異なる構成を持つブロックプラグインの複数のインスタンスの作成が含まれます。単一のベースプラグインから複数のメニューリンクを生成します。特定のタスクまたは要件に合わせてカスタムモジュールの複数のバリエーションを作成します。ベースプラグインとそのすべてのデリバティブを追跡し、それらがすべて最新で機能していることを確認します。これは、すべてのプラグインを管理するための集中インターフェイスを提供するDrupalのプラグインマネージャーを通じて行うことができます。さらに、プラグインデリバティブを定期的に確認および更新して、サイトのユーザーのニーズとニーズを引き続き満たしていることを確認することが重要です。
Drupal 8プラグインデリバティブを使用することに制限や課題はありますか?
はい、Drupal 8プラグインデリバティブは、サードパーティのプラグインで使用できます。ただし、すべてのサードパーティプラグインがデリバティブをサポートするように設計されているわけではないため、追加の作業を行う必要がある場合があることに注意することが重要です。使用している特定のプラグインのドキュメントを常に確認して、デリバティブをサポートするかどうか、およびそれらを実装する方法を確認してください。タスクごとに実行する必要があるコードの量を減らすことにより、サイトのパフォーマンスを改善できます。単一のベースプラグインを作成してから、複数のデリバティブを生成することにより、各タスクの個別のコードを書き込み、実行する必要がないようにします。これにより、特に多数の同様のタスクがあるサイトでは、大幅なパフォーマンスが向上する可能性があります。彼らの動的な性質のために挑戦的になる可能性があります。ただし、Drupalはこれを支援するためのいくつかのツールとテクニックを提供しています。最も有用なものの1つは、デバッグおよび開発ツールの範囲を提供するDevelモジュールです。さらに、Drupalのエラーロギングおよびレポート機能は、発生する問題に関する貴重な情報を提供できます。 Drupal 8プラグインデリバティブの詳細を学ぶため。プラグインデリバティブを含むDrupal開発のあらゆる側面に関する包括的な情報を提供するため、公式のDrupalドキュメントは開始するのに最適な場所です。さらに、このトピックを詳細にカバーする多くのチュートリアル、ブログ投稿、フォーラムディスカッションがあります。
以上がDrupal 8プラグインデリバティブを効果的に使用するチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

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

ホットトピック









