>

수정 가능한 엔터티가 있다고 가정 해 봅시다. 코드에서 기본 필드의 수정 가능 여부를 설정할 수 있습니다. 여태까지는 그런대로 잘됐다.

그러나 사용자 인터페이스를 통해 추가되는 필드는 어떻습니까? 모든 필드를 수정 가능 또는 수정 불가능으로 설정하는 방법이 있습니까? 또는 UI에서 각 필드에 대해 이것을 개별적으로 설정하는 방법이 있습니까?


  • 답변 # 1

    기본적으로 사용자 인터페이스에서 작성된 모든 엔티티 필드는 개정 가능으로 설정되며 사용자 인터페이스는 필드를 개정 불가능으로 설정할 수 없습니다. 그 정보는 field_entity_field_storage_info() 다음 코드가 포함되어 있습니다.

    $ids = \Drupal::entityQuery('field_storage_config')
      ->condition('id', $entity_type->id() . '.', 'STARTS_WITH')
      ->execute();
    // Fetch all fields and key them by field name.
    $field_storages = FieldStorageConfig::loadMultiple($ids);
    $result = [];
    foreach ($field_storages as $field_storage) {
      $result[$field_storage->getName()] = $field_storage;
    }
    return $result;
    
    

    FieldStorageConfig::isRevisionable() 항상 반환 TRUE .

    public function isRevisionable() {
      // All configurable fields are revisionable.
      return TRUE;
    }
    
    

    구성 가능한 필드를 개정 할 수 없도록하려면 모듈이 구현해야합니다. hook_entity_field_storage_info_alter() 그리고 변경 $field_storage 에서 반환 된 값 field_entity_field_storage_info() .

     function mymodule_entity_field_storage_info_alter(&$fields, $entity_type) {
        $ids = \Drupal::entityQuery('field_storage_config')->condition('id', $entity_type->id() . '.', 'STARTS_WITH')
          ->execute();
        // Fetch all fields and key them by field name.
        $field_storages = FieldStorageConfig::loadMultiple($ids);
        $result = [];
        foreach ($field_storages as $field_storage) {
          $result[$field_storage->getName()] = // Replace $field_storage with an object implementing FieldStorageDefinitionInterface and returning the value you want with isRevisionable().
        }
        return $result;
      }
    
    

  • 이전 drupal - 컨트롤러에서 POST 및 매개 변수로 리디렉션
  • 다음 drupal - 다중 사이트에 사이트를 추가하는 방법