필드 유형 목록을 얻는 방법? 결과 DrupalContrib 페이지가 발견되었습니다.이

Drupal 7에서 Drupal 8로 모듈을 포팅하고 있습니다.이 모듈의 구성 설정에서 현재 존재하는 필드 유형 목록을 가져와야합니다.

Drupal 7에서는이 field_info_field_types()기능을 사용하여이 작업을 수행했습니다 .

Drupal 8 (8.0.0-rc3)에서 Drupal API 참조 도움말 페이지에 명시되어있는 정보에도 불구하고 “기능이 존재하지 않습니다”라는 오류가 발생 합니다.

그런 다음 조사 결과 DrupalContrib 페이지가 발견되었습니다.이 페이지 에서 함수가 더 이상 사용되지 않는 것으로 선언되어 현재 사용할 것을 제안합니다 Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions().

그러나 이것을 사용하면 “Unknown service plugin.manager.entity.field.field_type”이라는 오류가 발생합니다. 다행히 “plugin.manager.field.field_type?”

그래서 사용 Drupal::service('plugin.manager.field.field_type')->getDefinitions()하고 와우를 시도했습니다 : 예상되는 필드 유형 배열을 얻었습니다.

그러나 각 배열 구성원 (하나의 필드 유형)은 이제 자식 배열 대신 객체이며 찾고있는 데이터는 보호 된 속성 내에 중첩되어 있으므로 액세스 할 수 없습니다.

이 단계에서 나는 붙어 있습니다. 필자는 이러한 데이터를 탐색하기 위해 확장 할 수있는 클래스가있을 수 있다고 생각했지만 운이 없었습니다. 필드 유형 정의가 집중되어있는 Drupal 8의 구성 요소를 파악할 수 없었습니다.



답변

첫 번째 수준은 배열입니다. 키는 플러그인 ID입니다. 당신은 그들을 나열 할 수 있습니다 :

$defs = Drupal::service('plugin.manager.field.field_type')->getDefinitions();
foreach ( $defs as $key => $value ) {
   echo $key, "\n";
}

결과는 다음과 같습니다.

comment
datetime
file
image
link
list_string
list_float
list_integer
path
text_with_summary
text
text_long
email
boolean
created
changed
timestamp
string_long
language
decimal
uri
float
password
string
integer
entity_reference
uuid
map
taxonomy_term_reference

하나를 선택하고 플러그인 정의를 덤프 할 수 있습니다.

var_dump($defs['comment']);

특별한 물건에 관심이 있다면 api.drupal.org의 도움으로 더 깊이 파고들 수 있습니다. 그러나 핵심 디렉토리에서 플러그인을 검색하면 더 쉬울 것입니다.

객체에 액세스하려면 var_dump에서 객체를 찾아 메소드를 사용하십시오.

$defs['comment']['description']->render();

이 경우 번역 된 문자열에 액세스하기 위해 render 메소드를 갖는 객체 TranslatableMarkup 입니다.


답변

t ()를 통해 전달 된 모든 문자열은 이제 객체입니다. 실제로 문자열로 액세스 할 수 있습니다.

배열 키와 같은 객체를 그대로 사용할 수없는 예외는 거의 없습니다. 예를 들어 문자열로 캐스팅해야합니다. 다른 것들은 작동해야합니다.

PS : 공식 API 문서는 http://api.drupal.org/api/drupal/8 입니다. 코어에 사용하십시오.

또 다른 좋은 자원이 변경 기록은 다음과 같습니다 https://www.drupal.org/list-changes/published?keywords_description=field_info_field_types&to_branch=&version=&created_op=%3E%3D&created%5Bvalue%5D=&created%5Bmin%5D=&created%5Bmax% 5D =

편집 : 귀하의 의견에 답변, 나는 당신이 무슨 뜻인지 이해하지 못합니다. 필요한 모든 정보가 있습니다. 바로 사용하십시오.

$definitions = Drupal::service('plugin.manager.field.field_type')->getDefinitions();
foreach ( $definitions as $field_type => $definition) {
  print $definition['label'];
  print $definition['description'];
  print $definition['provider'];
}

다시 말하지만, 레이블 / 설명은 객체라는 것을 무시하십시오. 인쇄 / 사용시 자동으로 호출되는 __toString () 메소드가 있습니다.


답변

@Berdir 답변의 버전이 업데이트되었습니다. 쉘에서 사용하십시오.

$definitions = Drupal::service('plugin.manager.field.field_type')->getDefinitions();
foreach ( $definitions as $field_type => $definition) {
  print 'Label: '. $definition['label']. PHP_EOL;
  print 'Machine name: '. $field_type. PHP_EOL;
  print 'Descritpion: '. $definition['description']. PHP_EOL;
  print 'Provider: '. $definition['provider']. PHP_EOL . ' ---' . PHP_EOL;
}

여기에 출력 : https://gist.github.com/sobi3ch/70635cc62defff606242


답변

Google은 이들을 검색 할 때이 질문을 찾는 것 같습니다

Drupal Console을 사용하는 경우 다음을 사용할 수도 있습니다.

drupal plugin:debug field.field_type

Drupal.org에도 다음이 도움이 될 수 있습니다.

컨텐트 엔터티 필드 정의 정의 및 사용

사용 가능한 예제를 찾는 것은 쉽지 않습니다.


답변