Drupal 8에서 사용자 지정 엔터티를 만드는 방법 [닫기]


10

Drupal 7에는 많은 사용자 지정 엔터티가있는 대규모 개인 프로젝트 빌드가 있습니다. Drupal 8로 프로젝트 업그레이드를 시작하고 싶지만 완전히 다시 작성된 Drupal 8 코어가 너무 커서 문서없이 머리를 갖기에는 너무 큽니다. .

핵심 모듈 코드 중 일부를 보았지만 성공하지 않고 사용자 지정 엔터티를 만들려고했습니다.

Drupal 8 (사용자 정의 항목을 찾을 수 없었습니다)의 사용자 지정 엔터티에 대한 기사를 알려주거나 기본적인 단계별 지침을 제공 할 수 있습니까?

감사.

entities  8 

1
얼마나 멀리 있고 정확히 어디에서 어려움을 겪고 있는지 질문을 편집 할 수 있습니까? 문제가있는 특정 코드를 보는 것이 이상적입니다. 사용자 지정 엔터티를 작성하는 것은 쉬운 일이 아닙니다. 아마도 사이트 형식과 정답을 얻을 수있는 기회에 대해 너무 광범위한 질문 일 것입니다. 링크 / 튜토리얼에 대한 요청은 그 이유 때문에 여기서 특별히 주제가 다릅니다. 한 조각 씩 나누고 작은 조각에 대해 질문하는 것이 좋습니다. 감사합니다
Clive

따로, Symfony를 모른다면 D7 지식을 D8에 적용하기가 어려울 것입니다. 이미 알고 있듯이 상황이 상당히 바뀌 었습니다. 여행을 시작하기 전에 가능한 한 많은 Symfony 책 을 읽는 것이 좋습니다 . 그런 종류의 접지가 있으면 전환이 훨씬 순조로워집니다. 다른 한편으로, 핵심 Contact 모듈의 Category 및 Message 엔터티는 학습을위한 매우 좋은 출발점이 될 수 있습니다.
Clive

@Clive 유효성 검사 API 외에도 Drupal 8의 Entity API는 Symfony와 거의 관련이 없으므로 관련성이 없다고 생각합니다. 그렇지 않으면 질문이 너무 광범위하다는 데 동의하지만 개요를 제공하려고 시도하면 더 구체적인 질문에 더 자세히 답변 할 수 있습니다. 그리고 D8을 모른다면 그다지 분명하지 않기 때문에 시작점이 도움이됩니다.
Berdir

@ Berdir 나는 일반적으로 엔티티가 아닌 D7-> D8을 의미했습니다. 예를 들어 Symfony 라우팅 및 서비스에 대해 알면 일반적으로 핵심 코드를 훨씬 쉽게 이해할 수 있습니다. 그건 그렇고 훌륭한 글쓰기,이 질문을 닫을 생각조차하지 않아도됩니다. IMO는 귀중한 자원입니다 (넓은 측면에서 부담이 되더라도)
Clive

답변:


13

https://drupal.org/developing/api/entity 에서 Entity API 문서를 작성 중 입니다.

질문에 대해 자세히 답변하기에는 너무 크며 컨텐츠 또는 구성 엔티티가 필요한지 여부에 따라 다릅니다. 콘텐츠 엔터티 (데이터베이스에 저장, 필드 가능 / 개정 가능 / ..., 위의 링크의 세부 정보가있을 수 있음)를 원한다고 가정하면 이와 같은 작업을 수행해야합니다. 위의 링크 된 문서는 결국 자습서를 포함하여 각 단계를 포함합니다. 첫 단계 만 다룹니다.

  1. 엔티티 클래스를 제공하고 엔티티로 노출하기 위해 필요한 주석을 추가하십시오.
  2. 필요한 테이블을 제공하십시오. 7.x 스키마가 이미 있으면 크게 변경할 필요는 없지만 엔터티에 언어 / 번역이 가능한 경우 uuid 및 langcode 열을 추가하려고합니다. 일부 기본 필드 (속성)를 변환 가능하거나 수정 가능하게하려면 현재 필요한 테이블을 직접 제공해야하는 경우 단계에서 링크 된 노드 예제를 참조하십시오.
  3. baseFieldDefinitions () 메소드에서 기본 필드 정의를 제공하십시오. . 이것이 작동하는 방식은 https://drupal.org/node/2047229에서 (배열에서 클래스로) 변경됩니다 .
  4. 엔터티를 저장하기 전에 (예 : 변경된 타임 스탬프 업데이트와 같은) 사용자 지정 논리가 필요한 경우 필요한 사전 / 사후 저장 /로드 / 삭제 방법을 구현하십시오.
  5. 사소한 액세스 로직이있는 경우 액세스 컨트롤러를 구현하고 checkAccess () 및 checkCreateAccess () 메소드를 대체하거나 전체 액세스를 허용하는 단일 권한이있는 경우 주석에 admin_permission을 지정하십시오.
  6. 기본 필드에 유용한 (일반적으로 get / set / isSomething ()) 메소드를 포함하는 엔티티 클래스 (예 : Node 용 NodeInterface)에 대한 인터페이스를 기술적으로 요구하지는 않지만 인터페이스에 힌트를 입력 할 수 있습니다. 해당 메소드에 대해 자동 완성을 얻으십시오.

필요한 것에 따라 필요한 양식 정의, 렌더 컨트롤러 등의 추가 단계도 있지만 자세한 정보가 필요한 경우 별도의 질문이 될 수 있습니다.

노트:

  • 구성 엔터티는 기본적으로 비슷하지만 구성 저장소 컨트롤러를 사용해야한다는 점을 제외하고 는 https://drupal.org/node/2119905로 쉽게 만들 수 있습니다. 테이블 스키마를 정의 할 필요는 없지만 분명히 제공해야합니다. 설정 스키마 파일, 예를 들어 분류 어휘 또는 노드 유형에 대한 파일 참조.
  • 컨텐트 엔터티에는 기본 필드가 공용 또는 보호 속성으로 정의되지 않고 대신 값 및 필드 속성에서 자동으로 관리됩니다. get () / set () 또는 해당 매직 메소드를 통해 액세스하십시오. ($ node-> title은 $ node-> get ( 'title')과 같습니다.)
  • 문서에 대한 도움말은 매우 환영받을 것입니다. 내가 원하는 내용 / 구조에 대한 기본 개요를 만들었으므로 새 페이지를 만들고 시작하십시오. 예를 들어 간단한 구성 요소, 구성 엔터티에 대한 관심이 있습니다. 준비되면 엔티티 문서로 이동합니다 : https://drupal.org/node/1809494
  • Core에는 상당히 많은 수의 컨텐츠 엔티티 구현이 있습니다. 1 단계에서 링크 된 기사에서 설명한대로 노드, 사용자, 용어, 주석, CustomBlock 등과 같은 실제 예제를 보려면 언제든지 제공되는 엔티티 유형을 찾을 수 있습니다. 엔티티 네임 페이스의 모듈.
  • @fago는 이번 주말 DrupalCamp Vienna에서 Entity API대한 프레젠테이션을 했으며 여기에 쓴 내용을 많이 포함합니다.

1
드루팔 코드 생성기는 매우 유용합니다->> github.com/Chi-teck/drupal-code-generator
레미

1
drupalconsole.com- 또한 훌륭한 도우미 (보일러 플레이트 코드를 생성하고 Drupal과 상호 작용하고 디버깅하는 도구)
milkovsky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.