ホームページ >バックエンド開発 >PHPチュートリアル >Drupal 8エンティティの検証とタイプされたデータが説明されました
FieldItemListInterface
この記事とその続編は、Drupal 8エンティティ検証APIの実用的なアプリケーションと拡張を掘り下げます。 基礎となる型付けデータAPIを検討し、コードの例を提供します(この
gitリポジトリ内のデモモジュールで使用できます)。
型inpedデータAPIを理解:
タイプされたデータAPIは、データインタラクションのための一貫したインターフェイスを提供します。 その重要性は、型付けされたデータオブジェクトの検証を定義および呼び出すことにあります。 重要なコンポーネントには次のものがあります
データの定義:データ構造、相互作用方法、設定、および検証の制約を定義します。 Datatypeプラグイン:
データ型に基づいて値を取得および設定するためのメカニズムを提供します。 プラグインマネージャーが提供するデータ定義インスタンスを利用しています。
<code class="language-php">$definition = DataDefinition::create('string') ->addConstraint('Length', array('max' => 20)); $string_typed_data = \Drupal::typedDataManager()->create($definition, 'my string');</code>これにより、最大の長さの制約を備えた文字列データ定義が作成され、
プラグインインスタンスを作成します。このインスタンスのTypedDataManager
メソッドは、定義された制約に対する検証をトリガーし、StringData
。
validate()
ConstraintViolationList
と入力されたデータとコンテンツエンティティ:
Drupal 8エンティティプロパティとフィールドAPIフィールドを統合します。 一部のフィールドはベースフィールド(基本的に古いエンティティプロパティ)ですが、他のフィールドは構成可能です。 各フィールドは、の実装を使用してデータを管理し、通常は
プラグインを含み、それぞれがデータ型プラグインを拡張し、実装(多くの場合FieldItemListInterface
)を使用しています。
FieldItem
DataDefinitionInterface
制約の追加:FieldItemDataDefinition
制約は、検証の詳細、エラーメッセージ、およびバリデーターオプションを含むプラグインです。 VALIDATORクラスは、実際の検証を実行します エンティティレベルの制約:エンティティクラスでの注釈を介して追加されました。 例:
エンティティの制約を変更するには、
:を使用します
フィールドレベルの制約:<code class="language-php">constraints = { "CommentName" = {} }</code>メソッドは、エンティティタイプがカスタムかコアか、フィールドがベースか構成かによって依存します。 カスタムエンティティの種類の場合、
に制約を追加します。既存のエンティティタイプの場合、ベースフィールドにはhook_entity_type_alter()
、構成可能なフィールドには
<code class="language-php">function demo_entity_type_alter(array &$entity_types) { $node = $entity_types['node']; $node->addConstraint('ConstraintPluginName', ['array', 'of', 'options']); }</code>
結論と次のステップ:baseFieldDefinitions()
hook_entity_base_field_info_alter()
hook_entity_bundle_field_info_alter()
この記事は、Drupal 8のエンティティ検証とデータAPIと入力された型付けの基本的な理解を提供します。次の部分は、検証プロセス自体を掘り下げ、違反を処理し、カスタム制約とバリデーターを作成します。
<code class="language-php">function demo_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) { if ($entity_type->id() === 'node') { $title = $fields['title']; $title->addPropertyConstraints('value', ['Length' => ['max' => 5]]); } }</code>(長さの制約のために、提供されているFAQSセクションはここでは省略されていますが、別のセクションとして統合できます。)
以上がDrupal 8エンティティの検証とタイプされたデータが説明されましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。