web-dev-qa-db-ja.com

構成エンティティの操作中にスキーマを作成するのはいつですか?

カスタムフォーム_mymoduleForm.php_があり、mymodule_preprocess_node()を呼び出してロジックを実行します。 addCacheableDependency()を追加できましたが、_mymodule_preprocess_node_フックは、いくつかの変更を行ってキャッシュをクリアした後でも、最新の変更をプルできるようになりました。

_mymodule.schema.yml_フィールドに値を格納するための変換やその他の方法ではこの構成は使用されないため、_some_field_は作成しませんでした。

_mymodule.schema.yml_ファイルがなくても問題なく動作しているように見えますが、必要なのかと考えていました。これが_mymodule.schema.yml_が必要な状況であるかどうか(または常に必要な場合)についてのガイダンスが必要です。

mymoduleForm.php

_class mymoduleForm extends ConfigFormBase {
  public function buildForm(array $form, FormStateInterface $form_state) {
    if (!$this->entity->isNew()) {
        \Drupal::service('renderer')->addCacheableDependency($form, $this->entity);
      }

    $config = $this->config('mymodule.settings');

    $form['some_field'] = [
      '#type' => 'textarea',
      '#title' => $this->t('Some field title'),
      '#description' => $this->t('some description'),
      '#default_value' => $config->get('some_field'),
    ];

    return parent::buildForm($form, $form_state);
  }

  public function submitForm(array &$form, FormStateInterface $form_state) {
    $this->config('mymodule.settings'),
      ->set('some_field', $form_state->getValue('some_fields'))
      ->save();
  }
}
_

mymodule_preprocess_node

_function mymodule_preprocess_node(&$variables) {
  $config = \Drupal::config('mymodule.settings');
  // add the cache tag, so that the output gets invalidated when the config is saved
  \Drupal::service('renderer')->addCacheableDependency($variables, $config);
  $config_value = $config->get('some_field');

  $library = 'mymodule/some-library';

  if($config_value == 'some_value') {
    $variables['#attached']['library'][] = $library;
  }
}
_

これは、次の質問です 変更後に構成エンティティのキ​​ャッシュをクリアする方法

3
usernameabc

短い答え:常に1つは必要ですが、本当に必要な場合は回避できます(以下のポイント3を参照)。

スキーマファイルは何に使用されますか?

  1. 導入された主なユースケーススキーマファイルは、多言語サポートです。出荷された構成内のすべての翻訳可能な文字列を識別するためのツールが必要です。独自の設定、デフォルトのビュー、追加のユーザーロール、メニュー項目などで出荷する場合、モジュールの一部として翻訳用にそれらを提供できます。 / http://localize.drupal.org の/ themeリリース。ネストレベルとタイプは、このユースケースでは十分です。
  2. また、スキーマを使用して、データに基づいて構成するための実際の翻訳フォームを提供します。このユースケースでは、タイプがより重要になり、ラベルが重要になります。コアConfiguration translationモジュールは、スキーマを使用して翻訳フォームを生成し、翻訳を保存します。最も重要な2つの組み込みの翻訳可能なタイプは、1行のテキスト入力の「ラベル」と複数行のテキスト入力の「テキスト」です。
  3. 構成エンティティーの保存内容に関する構成スキーマに埋め込まれた知識を使用して、構成エンティティーのデフォルトの永続性実装には、構成エンティティーの構成スキーマが必要ですなので、定義されたタイプで正しいプロパティがエクスポートされます。構成スキーマを提供することをお勧めしますが、本当に必要ない場合は、タイプの構成エンティティを保存するためのスキーマを必要としないように、構成エンティティ実装にtoArray()メソッドを実装してください。
  4. 最後になりましたが、構成スキーマは、予想される型に値を自動的に型キャストするためにも使用されます。これにより、PHPおよびWebフォームは一般に他のすべてのタイプよりも文字列を優先しますが、構成を保存するときに正しいタイプが使用されます。これは重要なので、構成をデプロイするときは実際の変更のみが表示されます。違い、ランダムなタイプの変更はありません。

設定スキーマ/メタデータから

2
Andy